WinCE C/C++ 运行时库下如何检测泄漏?

Posted

技术标签:

【中文标题】WinCE C/C++ 运行时库下如何检测泄漏?【英文标题】:How to detect leaks under WinCE C/C+ runtime library? 【发布时间】:2008-12-23 01:41:31 【问题描述】:

我知道使用 crtdbg.h 标头对 Win32 进行基本泄漏检测的可能性,但是 CE CRT 库标头中不提供此标头(我使用的是最新的 SDK v6.1) .

任何人都知道如何使用 VC 9.0 自动检测 WinCE/ARMV4I 配置中的泄漏?我不想为我的类层次结构覆盖 new/delete,我更喜欢准备好使用和测试过的代码。

【问题讨论】:

【参考方案1】:

在工作中(开发基于 WindowsCE 的操作系统 + 应用程序),我们创建了自己的内存管理器,大致基于 Fluid Studios Memory Manager(我使用 SO 找到的链接!)。我很确定通过一些简单的修改,您可以将其调整为在您的平台上使用。

基本上它不会覆盖 new 和 delete,而是使用预处理器向它添加额外的报告。然后,一旦程序退出,它就会生成一个内存泄漏的输出文件。

【讨论】:

我正在为我的 WinCE 开发人员使用 Fluid Memory Manager。非常感谢,这就是我要找的检漏仪!!! 这对我来说无法编译(找不到unlink_unlink_wunlink,即使包括wchar.hio.h(不存在))跨度> 您是否定义了所有必要的预处理器常量?您是否链接到正确的库?听起来你可能没有正确设置项目。【参考方案2】:

您想使用AppVerifier 或Entrek CodeSnitch。我在短时间内让 CodeSnitch 工作的运气要好得多。需要注意的是我没有做很多WinMo - 主要是香草CE。我相信 CodeSnitch 和更新的 WinMo 设备(Platman 与 Corecon)存在连接问题,但我也相信 Entrek 要么有一个测试版,要么有一个适用于它的补丁。我的建议是给 Entrek 打电话(不要发邮件,他们很忙,所以打电话是您获取信息的最快途径),只有当您发现它不起作用时,才可以查看 AppVerifier。

【讨论】:

CodeSnitch 不是免费的 :( 并且 AppVerifier 不适用于 Windows Mobile(我没有提到 CE 的移动版本)。无论如何,为您的回复投 1 票,谢谢!:)跨度> 也许我应该编写自己的检漏仪重载新/删除,我现在需要一些非常基本的东西..... 你没有说你追求免费,我可以说 CodeSnitch 的价格在你第一次使用它时就得到了回报。一个可以节省数周寻找深奥内存错误的工具非常非常值得。【参考方案3】:

我认为有一个 SourceForge 项目可以解决这个问题:

http://sourceforge.net/projects/crtdbg4wince/

如果我理解你的问题,它就是你正在寻找的

【讨论】:

以上是关于WinCE C/C++ 运行时库下如何检测泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2015:在没有运行时库的情况下编译 C/C++

c_cpp [C ++]我们如何在程序中检测内存泄漏

什么是内存泄漏?

C/C++ 动态检测内存错误利器 - ASan

错误 MSB8024:不支持使用静态版本的 C++ 运行时库

C/C++动态检测内存错误利器 - ASan