热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

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

最近一周的时间在修改一个内存异常导致的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++程序员尝试 !

推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • TechStride 网站
    TechStride 成立于2014年初,致力于互联网前沿技术、产品创意及创业内容的聚合、搜索、学习与展示。我们旨在为互联网从业者提供更高效的新技术搜索、学习、分享和产品推广平台。 ... [详细]
author-avatar
小强
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有