一对MS内存泄漏查找工具(Leakdiag和LDGrapher)和STL类跨DLL调用引起内存泄漏

来源:互联网 发布:魔法抠图软件 编辑:程序博客网 时间:2024/05/03 02:10

今天写点工作相关的,同时给大家介绍工具(Leakdiag和LDGrapher)。

这两个星期可以说是觉都没睡好,公司公测后运行的游戏,完成一个任务后内存飚到1G多,靠这游戏还能怎么玩,让玩家怎么玩啊,一个月几十万的充值势头,怕没两个星期就会掉下去。这几天一直和主程不停的查找原因。

当然,这么大的内存泄漏,最引起我们注意的当然就是图形引擎这一块了,只有地图、光效和图片资源才会占用如此大的内存。但因为引擎代码是另外项目组在维护,给我们的只是一些库文件,所以没有办法,我们只能对每一个通过底层接口频繁的调用来测试底层的问题(只有拿出证据,你才有说话的权力)。但是,最后的结果让我们失望,通过反复的测试,排除底层的问题。

当然,进一步,我们又从调用特别繁琐的寻路算法进行排除,发现也不是其中的原因。真的是山穷水尽了,大家整的都很疲惫。内存还是飚,问题还是要解决。

可能大家看到标题,我写了这么多的费话可能,你会问题,你们早一点没有想到找一个工具测一下啊。这个当然是首先想到的,不断的去找的,不然要不会介绍今天的Leakdiag和LDGrapher,开始找了很多的工具去试去配,但是都没有达到想要的结果。最后,微软的Leakdiag和LDGrapher凳场了,也给我们带来了光明。(得出一个结论:要用工具,要用好工具,要用对工具)。应该有很多人知道了其强大性,这里再强调一个,我相信,中国的程序员应该学会一点,那就是好工具大家用,好资料大家看,好代码大家学习的分享精神。

不说费话,网上有几篇介绍Leakdiag和LDGrapher的文章,说的也算详细:

http://www.cppblog.com/sandy/archive/2008/08/18/59260.html

还有几点要强调:

1、log下来的并不是内存泄漏的,而是你运行开始,分配了还没有释放的;

2、log的堆栈可以设置为1-32,所以足够你定位错误代码(Tools设置);

3、在你认为的关键点打几个log,用LDGrapher线谱图可以很明显的看出内存分配的情况。

当然,最后写一下出问题的原因,也是大多数有一定项目经验的人都会遇到的STL类跨DLL调用的问题。这个问题的讨论也很多,google一下你会有很大的收获。

http://www.cppblog.com/fwxjj/archive/2009/06/16/87810.html

http://www.cppblog.com/xingmuxixi/archive/2009/05/18/83281.html

我们这次遇到的主要问题是在一个Dll中的接口中返回了一个std::vector的值对象,在.exe文件中用了这接口,对返回的vector做了操作,也就是说,一个在Dll中创建的STL对象,在.exe中释放的时候,会造成STL内存分配的异常,导致内存大量的泄漏。

好了,就写这么多了,问题解决了,可以回家睡个好觉了。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangbinjn/archive/2009/08/13/4444641.aspx

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 45岁了月经不来怎么办 吃了芒果身上痒怎么办 10个月宝宝上火怎么办 1个月的宝宝上火怎么办 2个月的婴儿上火怎么办 1岁宝宝不吃奶粉怎么办 奶水不够宝宝又不吃奶瓶怎么办 13岁脸上长粉刺怎么办 脸敷面膜过敏了怎么办 婴儿面膜是假的怎么办 一贴面膜就过敏怎么办 一敷面膜就过敏怎么办 敷了面膜后过敏怎么办 脸做面膜过敏了怎么办 二十几年的疤痕怎么办 三星c5听筒坏了怎么办 胖子减肥后皮肤松弛怎么办 小婴儿脸上长癣怎么办 痘痘里面有脓怎么办 牛仔外套买大了怎么办 脸上痘印红红的怎么办 眼罩里的水干了怎么办 面膜水进眼睛里怎么办 面膜用剩的精华怎么办 火山泥面膜边干怎么办 用完撕拉面膜后怎么办 皮肤锁水能力差怎么办 抱枕永久了脏了怎么办 新买的棉被掉毛怎么办 羊毛被总是窜毛怎么办 骆毛被子掉毛怎么办 太阳晒伤皮肤痒怎么办 皮肤被太阳晒伤怎么办 晒伤皮肤有斑怎么办 晒伤的皮肤变痒怎么办 晒了太阳脸发红怎么办 新棉被没太阳晒怎么办 白掌的叶子发黄怎么办 栀子花长得太高怎么办 新羊毛被有味道怎么办 新买的衣服掉毛怎么办