CRT 未检测到 DLL 中的内存泄漏
CRT not detecting memory leak in DLL
我开发了一个由主要可执行文件和动态库 (dll) 组成的应用程序。它们都是由我开发的,并且是在 Windows 10 Pro 上使用相同的编译器构建的(仅供参考:它们都包含在相同的 VS 解决方案中)。
当我想用 MS CRT 库测试可执行文件和库的内存泄漏时。我可以检测到可执行文件中的内存泄漏,但不能检测到动态库中的内存泄漏(我故意用一个未删除的整数在两者中泄漏)。
可执行文件是用 MDd 构建的,库是用 MTd 构建的。我还尝试使用 MTd 构建可执行文件,但没有成功。 (由于依赖关系,库必须使用 MT(d) 构建)。另请注意,我并不是说我有较小的内存泄漏报告(比如没有文件名和行),我的意思是没有关于 dll 的报告,而应该至少有一个。
问题是是否有人遇到过这个问题并且知道如何解决它。
您的 DLL 不使用 MFC?然后是问题,MFC 中的内存泄漏检测通过自己的分配器覆盖本机 C++ new 并使用 Microsoft 文档中提到的那个宏。恐怕你必须在 .LL 中使用 re-implement 跟踪方法,如果它不使用那个.. crt lib with _CRTDBG_MAP_ALLOC tracks malloc,不接触原生 operator new
.
Johannes Passing 在他的博客 post 中提到,当 DLL 链接到 CRT 的静态版本时,进行显式内存转储的正确位置是 DllMain 的 DLL_PROCESS_DETACH
案例。
我开发了一个由主要可执行文件和动态库 (dll) 组成的应用程序。它们都是由我开发的,并且是在 Windows 10 Pro 上使用相同的编译器构建的(仅供参考:它们都包含在相同的 VS 解决方案中)。
当我想用 MS CRT 库测试可执行文件和库的内存泄漏时。我可以检测到可执行文件中的内存泄漏,但不能检测到动态库中的内存泄漏(我故意用一个未删除的整数在两者中泄漏)。
可执行文件是用 MDd 构建的,库是用 MTd 构建的。我还尝试使用 MTd 构建可执行文件,但没有成功。 (由于依赖关系,库必须使用 MT(d) 构建)。另请注意,我并不是说我有较小的内存泄漏报告(比如没有文件名和行),我的意思是没有关于 dll 的报告,而应该至少有一个。
问题是是否有人遇到过这个问题并且知道如何解决它。
您的 DLL 不使用 MFC?然后是问题,MFC 中的内存泄漏检测通过自己的分配器覆盖本机 C++ new 并使用 Microsoft 文档中提到的那个宏。恐怕你必须在 .LL 中使用 re-implement 跟踪方法,如果它不使用那个.. crt lib with _CRTDBG_MAP_ALLOC tracks malloc,不接触原生 operator new
.
Johannes Passing 在他的博客 post 中提到,当 DLL 链接到 CRT 的静态版本时,进行显式内存转储的正确位置是 DllMain 的 DLL_PROCESS_DETACH
案例。