热门标签 | 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++程序员尝试 !

推荐阅读
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 2012年7月30日,语言岛团队宣布其智能记单词软件V0.3.4.554版本正式开源。该版本不仅支持跨平台使用,还引入了多项创新功能,旨在帮助用户更高效地记忆单词。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • Java中的基本数据类型与包装类解析
    本文探讨了Java编程语言中的8种基本数据类型及其对应的包装类。通过分析这些数据类型的特性和使用场景,以及自动拆装箱机制的实现原理,帮助开发者更好地理解和应用这些概念。 ... [详细]
  • Shell脚本中变量操作详解
    本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。 ... [详细]
  • 本文深入探讨了 PHP 实现计划任务的方法,包括其原理、具体实现方式以及在不同操作系统中的应用。通过详细示例和代码片段,帮助开发者理解和掌握如何高效地设置和管理定时任务。 ... [详细]
  • 本文详细介绍了Java的安装、配置、运行流程以及有效的学习方法,旨在帮助初学者快速上手Java编程。 ... [详细]
  • 本文深入探讨了 Linux 系统下进程的内存布局,包括栈、堆、BSS 段、数据段和代码段的特性与功能,并进一步分析了 C++ 程序中的内存管理特点。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
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社区 版权所有