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

推荐阅读
  • 【Linux进阶指南】第一阶段第三课:体验与部署Ubuntu系统
    在正式踏上Linux学习之旅之前,本课程将引导你深入体验和部署Ubuntu系统。通过详细的操作步骤和实践演练,你将掌握Ubuntu的基本安装、配置及常用命令,为后续的进阶学习打下坚实的基础。此外,课程还将介绍如何解决常见问题和优化系统性能,帮助你更加高效地使用Ubuntu。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 在编程笔试和面试中,全排列算法因其适中的难度而备受青睐,不仅能够考察应聘者的算法基础,还能测试其对递归和回溯的理解。本文将深入解析全排列算法的实现原理,探讨其应用场景,并提供优化建议,帮助读者更好地掌握这一重要算法。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • PHP与MySQL的Web应用开发技术深入解析
    PHP与MySQL的Web应用开发技术深入解析 ... [详细]
  • 《我的世界》Java版与Windows 10版(基岩版)有何不同?
    《我的世界》Java版与Windows 10版(基岩版)有何不同? ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • 在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统
    本文详细介绍了在VMware虚拟机中部署带有中文图形界面的CentOS 7 Linux系统的步骤。首先,通过“文件”菜单选择“新建虚拟机”并进入自定义设置。接着,在硬盘兼容性选项中选择默认设置。为了更好地进行Linux操作系统的安装练习,建议选择稍后安装操作系统,并在虚拟机安装完成后,根据实际需求删除不必要的硬件组件。此外,本文还提供了详细的配置参数和注意事项,帮助用户顺利完成整个部署过程。 ... [详细]
  • 在Linux系统中,通过调整内存配置可以有效提升程序运行时的性能。本文将探讨如何在Linux环境下优化内存分配,特别是针对使用Go语言开发的应用程序,提供实用的技巧和最佳实践,帮助Golang开发者提高程序的稳定性和效率。 ... [详细]
  • 在 CentOS 6.6 系统中搭建 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的运行环境配置指南
    本文提供了在 CentOS 6.6 系统上配置 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的详细步骤。首先,确保本机环境为 CentOS 6.6,并使用阿里云的 YUM 源来安装必要的软件包,包括 gcc、gcc-c++、bison、pkgconfig 和 glib2-devel。这些软件包是构建和运行 MONO 环境的基础,确保系统能够顺利支持 ASP.NET 和 MVC 应用的部署和运行。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • mac用于开发使用时间长硬盘会越来越小,速度越来越慢的,亦是花了几分钟研究怎么清理系统的缓存,方法:1,到https:www.omnigroup.commore安装OmniDisk ... [详细]
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社区 版权所有