问题标签 [crtdbg.h]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3681 浏览

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

我知道使用crtdbg.h头文件对 Win32 进行基本泄漏检测的可能性,但是这个头文件在 CE CRT 库头文件中不可用(我使用的是最新的 SDK v6.1)。

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

0 投票
3 回答
3743 浏览

c++ - Visual Studio _CrtDumpMemoryLeaks 总是跳过对象转储

我正在尝试使用 CRT 内存泄漏检测,但在 Microsoft Visual Studio 中不断收到以下消息:“检测到内存泄漏 - 跳过对象转储。” 我永远无法让它实际执行和对象转储。

我按照微软关于内存泄漏检测的文章 ( http://msdn.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx ) 中的说明进行操作,但没有成功。

在我的 stdafx.h 我有(重建整个项目):

在我的应用程序的入口点,我有:

我也希望它会以微软宣传的格式显示文件名和行号:

虽然我什至无法获得对象转储,但我注意到其他人说他们看到了这些方面的东西(即使定义了 _CRTDBG_MAP_ALLOC ):

我真的不想花时间覆盖 new 和 delete 运算符,所以我希望 CRT 调试能帮助我。如果这不起作用,我可能最终会覆盖 new 和 delete 运算符,但我真的想获得带有文件名和行号的分配信息(交叉手指)。

谢谢,基里尔

0 投票
3 回答
4611 浏览

c++ - 使用 Boost 时的内存泄漏检测

我想使用 _CRTDBG_MAP_ALLOC 获取内存泄漏信息,尤其是文件和行号,但最后我没有得到它们。我只得到这样的东西:

{130} 0x00695128 处的普通块,16 字节长。数据:<\E Pi > 5C A5 45 01 02 00 00 00 01 00 00 00 E8 50 69 00

我已经看到这应该在所有包括之前:

有些人建议在所有源文件中包含所有内容后添加此内容:

但是,在 main.cpp 中,如果我显式添加内存泄漏,它会在我的输出中与行号一起出现!所以它有效,但并非适用于所有...

当我使用 Boost 库时,我怀疑内存泄漏都发生在这些......(shared_ptr?)的某个地方。但是如何知道这些内存泄漏是从哪里来的呢?

0 投票
2 回答
6060 浏览

memory-leaks - 为什么 _CrtSetBreakAlloc 不会导致断点?

我正在使用 Visual CRT 的内存泄漏检测例程<crtdbg.h>;当我调用_CrtDumpMemoryLeaks一个分配时,程序的每次调用都会一致地报告:

地址不同,但{133}始终相同。

根据 MSDN 关于How to set breakpoints on memory allocation number的说明,我应该能够通过此调用在第 133 个分配上设置断点:

而且我还可以在监视窗口中验证{,,msvcr90d.dll}_crtBreakAlloc确实设置为 133。程序退出后,泄漏报告仍然列出 #133(以及一些更高的数字),但没有出现断点。为什么会这样?如何让断点发生?

潜在相关信息:

  1. VS2008,使用“多线程调试DLL”CRT
  2. 我的代码是由第三方产品加载的 DLL
  3. “正常”断点工作得很好;逐步完成工作正常;__asm int 3工作也很好。
  4. 也没有其他值_crtBreakAlloc导致断点(不是我尝试过的那些)
  5. #133 是泄漏报告中的最低数字
0 投票
1 回答
2266 浏览

c++ - 用宏替换 new 与放置 new 冲突

我有一个庞大的应用程序(几百万个 LOC,和数万个文件),我正在尝试使用调试 crt 来检测内存泄漏。我正在尝试像这样对 new 进行宏化:

现在,我的应用程序太大了,所以对我来说,理想情况下,我会将它放在一个头文件中,并专门将它包含在数以万计的 CPP 文件中。不是一个有趣的任务。所以我试图将它放在我们 SDK 中的一个通用头文件中,该头文件将包含在每个翻译单元中。

我遇到的问题是它似乎与一些 STL 头文件发生冲突,并且在使用放置 new 时编译器会发出错误。我可以在自己的代码中更改它,方法是使用编译指示并禁用新宏。那里没有问题。使用placement new的是STL头文件,我无法更改。

通过重新排列 cpp 文件中的 include 指令,我找到了一种解决方法。例如:

但这是一个困难的解决方法,因为我必须再次修改数千个文件,并确保首先包含它们的 STL 标。具有讽刺意味的是,我创建了一个 hello world 应用程序来专门测试这个问题:而且我的 hello-world 应用程序编译得很好。但是,如果没有这种解决方法,我的大型应用程序就不会。

所以我的问题是:

  1. 有没有人能够在不抖动大量代码的情况下完全宏化新的?(以相对无痛的方式)
  2. 有没有其他方法可以重新安排我的 STL 标头包含指令?

谢谢

0 投票
4 回答
10583 浏览

c++ - 在 crtdbg.h 导致冲突时覆盖 C++ 中的新运算符

在为我自己的内存管理器尝试一些内存跟踪和准备时,我尝试覆盖新的运算符。关于 Flipcode 的文章是我在此过程中的主要指导方针 ( http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml )。

在实现了该文章中描述的技术之后,我遇到的问题是,在 STL 中的某个地方,“crtdbg.h”被直接或间接地通过一些被包含的头文件包含(使用 Visual Studio 2010) .

这会导致错误:

通过放置“_CrtDumpMemoryLeaks()”而不包括头文件来进行快速检查,这证实了我怀疑头文件确实包含在 STL 文件中。

撇开实现我自己的新/删除是一个好主意不谈,我想知道如何在仍然使用一些标准库功能并且没有这些重新定义错误的情况下拥有自己的新/删除实现。


代码如下所示:

内存调试.h

内存调试.c

主文件

我解决它的方法是移动#define new DEBUG_NEW下面的<iostream>; 问题已解决,因为它不会重写crtdbg.h; 但是,这确实使必须确保始终在包含该crtdbg.h文件的可能标头之后执行此操作变得很麻烦。

我相信这只能通过为新操作员使用自定义名称并改用该名称来解决。我对么?

0 投票
1 回答
2746 浏览

mysql - MySQL C API 编译错误,crtdbg.h not found

我正在创建一个使用 mysql api 的基本 C 程序。我在 Windows 上,使用 mingw 作为我的编译器,使用 eclipse cdt 作为我的 IDE。我已经添加了 mysql 包含文件的包含路径和 mysqlclient.lib 文件的 lib 路径。但是,我收到此错误:

D:\Programs\MinGW\include\mysql/my_dbug.h:108:20: fatal error: crtdbg.h: No such file or directory

这是我的代码:

如果没有人能帮我解决这个问题,有人能告诉我使用 mysqlclient.lib 和 libmysql.lib/libmysql.dll 有什么区别吗?

干杯。

0 投票
1 回答
350 浏览

c++ - 似乎我不能将 MS 检漏仪用于新表达式“new (std::nothrow)”。那是对的吗?

我正在尝试使用新表达式获取文件和发生泄漏的行new (std::nothrow)

下面代码中注释的新表达式无法编译。

我也很想知道在哪里<iostream>包含<crtdbg.h>。我只是找不到它。但当然,它必须在某个地方。

0 投票
0 回答
474 浏览

visual-c++ - 使用 _CrtDumpMemoryLeaks 检测内存泄漏

这是我第一次使用 CRT 库来检测内存泄漏,我使用的是 Visual C++ 2003。正如本网站所述,我在我的程序中包含了这些语句

后跟另一个头文件,其中包含所有其他头文件,如 stdio.h、windows.h 和结构/函数声明。我也有

在我的函数返回之前。

当我尝试构建我的程序时,我得到了错误

对于 malloc.h 中的函数原型,例如

等等

如何正确运行内存检查调试器?

谢谢你。

问候,雷恩

0 投票
1 回答
574 浏览

c++ - crtdbg.h 是否与 DirectX 冲突?

我刚刚发现了隐藏的宝石crtdbg.h,它使内存泄漏检测变得更加容易。不幸的是,当我今天将 DirectX 链接到我的程序时,我遇到了一些我以前从未见过的错误。

似乎当 crtdbg 覆盖 new 运算符时,它破坏了 DirectX SDK 中的某些内容(如果您没有注意到错误,我正在使用 DirectX 11 SDK)。有这样的记录吗?几次搜索没有产生任何结果。我真的希望我可以继续使用这些内存调试工具,任何解决方法都将不胜感激!