gpt4 book ai didi

c++ - Visual Studio 2008 (C++) 内存泄漏检测不显示文件/方法位置 - 如何让它工作?

转载 作者:可可西里 更新时间:2023-11-01 17:55:28 25 4
gpt4 key购买 nike

我正在使用 instructions found here尝试查找 Win32 应用程序中的内存泄漏。如上所述,我把

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

文件顶部的行(包含 WINAPI _tWinMain 的 cpp 文件)然后在 winmain 的退出点我添加了

_CrtDumpMemoryLeaks();

不幸的是,我没有看到泄漏的行号/位置(但我确实得到了泄漏列表)。

我也试过

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
_CrtSetReportMode ( _CRT_ERROR, _CRTDBG_MODE_DEBUG);

在 winmain 的开头 - 再一次,运气不好。

我觉得这很奇怪,因为我发现泄漏或自动报告泄漏通常都没有问题。

这是我正在为新雇主开发的一款庞大的旧式应用程序。过去,我使用标准 VS 向导工作。

关于如何获取导致泄漏的源代码行/方法的任何建议? (或者至少是"new"电话的线路?

编辑:

I also tried visual leak detector - 没有成功。

很奇怪。

编辑

我尝试使用下面列出的 new 的重新定义,但是在编译 boost 时出现错误。

最佳答案

您确定泄漏的代码正在使用 CRT 调试分配例程吗?这需要使用 malloc()new(相对于 LocalAllocGlobalAlloc、一些自定义 block 分配器等..) 并且 _DEBUG(我认为)必须在包含 CRT header 时定义。

为了获取泄漏的源代码行,您需要定义 DEBUG_NEW分配无处不在。这是因为为了跟踪它们,每个分配都必须替换为包含 __FILE____LINE__ 的调用。向导中的标准定义类似于:

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif

这不处理 malloc,如果您正在调试的代码使用 malloc 而不是 new,则可能有类似的咒语>.

如果你使用的是预编译头,你可以把它放在预编译头文件中,它会影响该项目中的所有源文件。

关于c++ - Visual Studio 2008 (C++) 内存泄漏检测不显示文件/方法位置 - 如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com