欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

使用dr.memory在win32环境下调试 cocos2dx 项目的内存异常

程序员文章站 2022-06-17 23:43:20
...

最近一周的时间在修改一个内存异常导致的crash,只在真机上出现,重现率很低。想重现的时候玩1个小时也不出来,不想重现的时候又钻了出来。改起来很痛苦。 今天发现了一个内存异常调试的软件,叫做 dr.memory 。尽管还没有用它真正解决这个问题,但是这个软

最近一周的时间在修改一个内存异常导致的crash,只在真机上出现,重现率很低。想重现的时候玩1个小时也不出来,不想重现的时候又钻了出来。改起来很痛苦。

今天发现了一个内存异常调试的软件,叫做 dr.memory 。尽管还没有用它真正解决这个问题,但是这个软件发现这个软件确实很好用,能在windows环境下和 vs 配合使用。记录在这里。

dr memory 是专门调试内存异常的工具,能够发现许多错误的内存操作,主要是内存操作越界, 内存泄漏, 使用未分配内存, 资源泄露等。而且还能跨平台使用,支持 win32 (64位据说不支持) , linux 和 mac.今天我只在 win32环境下用到了。

这个软件下载后,是个安装包,安装完毕之后是几个 exe . 里面有个 doc 文件夹, 有一个网页说明文档,具体如何操作说的很详细。

如果是用 vs 和他配合使用的话, 需要 在编译时,按照这个说明文档, 配置一些编译选项,主要是去掉各种内存上的优化。 因为我在调试一个 cocos2dx 的工程,因此工程里每一个项目,都需要按照这个规定来修改编译选项。改好之后编译,编译出来 exe 以后,可以用drmemory 这个软件启动。具体的说明文档里面都有。

在软件运行过程中,控制台会实时输出当前发现的问题, 在最后游戏关闭时,会把这些问题汇总到一个 log 文件里,里面写着哪个 cpp 哪个函数有问题 ,包括堆栈都摆在那里。

如果是内存泄漏的话,它会告诉你哪里 new 的 哪里 delete 的不正确。还会把它猜测可能有问题的地方列举上去。

我做了一些简单的实验, 内存泄漏, 指针操作越界, 指针强制转换不正确 等一些相对明显的问题,都能很清晰的记录下来。 许许多多比较低级的内存使用细节错误都逃不出 drmemory 的法眼。

尽管还没彻底解决项目中遇到的最棘手的问题,但是为我解决这个问题,提供了一些非常有用的线索,之前一直怀疑可能有问题的地方,都被log 标记了出来,明天可能要对着这些log 仔细分析一番。


总之,以前我没接触过类似的软件,我觉得这个软件非常好用! 感觉 xcode 的 instrument 虽然能够找到一些内存泄漏问题,但是对c++代码内存错误的使用没有什么更好的办法(也可能是我不会用)。但这个软件在 c++ 内存使用问题的解决上, 貌似比 instrument 更胜一筹。

具体结合 2dx 项目上,它会把许多参数传空指针的问题列举出来, 也会因此报出许多引擎内部的错误。有些地方似乎是误报,但是因为输出的 log 结构清晰,尽管很多没用的信息,也并不影响 log 分析。并且仔细阅读 dr memory 的文档可以发现能够用参数过滤掉许多不想要的 log内容。

总之个人感觉 dr memory 非常好用,能够迅速定位相对明显的c++新手可能常犯的内存使用错误 , 也能够给隐藏得比较深的问题提供线索.

非常推荐被内存问题折磨得体无完肤的 C++程序员尝试 !