升级到 Visual Studio 2019 时内存不足
Memory leas when upgrading to Visual Studio 2019
我最近将我们的项目从 VS2010 升级到 2019,效果很好,但是在调试器下运行它时,我在完成时遇到了很多内存泄漏。
当然,它们在 VS2010 中不存在。
我所有的资源都是用
构建的
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
但是泄漏的转储有点像这样:
[16300] Detected memory leaks!
[16300] Dumping objects ->
[16300] {64582}
[16300] normal block at 0x06210D00, 16 bytes long.
[16300] Data: < z z > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 80 DC 1C 06
[16300] {64581}
[16300] normal block at 0x06210E00, 16 bytes long.
[16300] Data: < z z 0 > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 30 D5 1C 06
[16300] {64580}
[16300] normal block at 0x062109C0, 16 bytes long.
[16300] Data: < z z > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 E8 CB 1C 06
[16300] {64579}
[16300] normal block at 0x06210780, 16 bytes long.
[16300] Data: < z z > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 90 C6 1C 06
这会持续大约 5700 行 ;-(
我已经检查了内存和句柄消耗:两者都正常。
我尝试使用像 MemPro(说没有泄漏)、Dr. Memory(崩溃)和 Visual leak detector 这样的工具,它说
[16300] No memory leaks detected.
[16300] Visual Leak Detector is now exiting.
在泄漏转储之后...
是否有可能我已经在 VS2010 中发现了漏洞,但它们哪里没有 found/reportet?我不这么认为?
那么有什么开始搜索的提示吗?
Is it likly that I had the leaks in VS2010 already but they where not
found/reportet? I don't think so?
So are there any hints to start searching for it?
从VS2017开始,VS有了一个不错的内存分析工具,可以用来查找内存泄漏。
在VS2019调试项目时(记得打断点),打开Debug --> Windows --> 显示诊断工具--> 选择内存使用
然后调试代码,遇到断点的时候,在Memory Usage[上点击Take snapshot =40=] window.
之后,点击图标进入内存分析,就可以找到问题了
您也可以参考one official document and two official document获取提示。
=========================================
DeLeaker 成功了,帮我找到了漏洞。毕竟我发现了一些没有设置 #define new DEBUG_NEW
的 .cpp-files。修复之后,发现问题就很容易了。感谢您的帮助,Artem Razin
我最近将我们的项目从 VS2010 升级到 2019,效果很好,但是在调试器下运行它时,我在完成时遇到了很多内存泄漏。 当然,它们在 VS2010 中不存在。 我所有的资源都是用
构建的#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
但是泄漏的转储有点像这样:
[16300] Detected memory leaks!
[16300] Dumping objects ->
[16300] {64582}
[16300] normal block at 0x06210D00, 16 bytes long.
[16300] Data: < z z > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 80 DC 1C 06
[16300] {64581}
[16300] normal block at 0x06210E00, 16 bytes long.
[16300] Data: < z z 0 > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 30 D5 1C 06
[16300] {64580}
[16300] normal block at 0x062109C0, 16 bytes long.
[16300] Data: < z z > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 E8 CB 1C 06
[16300] {64579}
[16300] normal block at 0x06210780, 16 bytes long.
[16300] Data: < z z > FC 8B AD 7A 18 8C AD 7A 01 00 00 00 90 C6 1C 06
这会持续大约 5700 行 ;-(
我已经检查了内存和句柄消耗:两者都正常。 我尝试使用像 MemPro(说没有泄漏)、Dr. Memory(崩溃)和 Visual leak detector 这样的工具,它说
[16300] No memory leaks detected.
[16300] Visual Leak Detector is now exiting.
在泄漏转储之后...
是否有可能我已经在 VS2010 中发现了漏洞,但它们哪里没有 found/reportet?我不这么认为?
那么有什么开始搜索的提示吗?
Is it likly that I had the leaks in VS2010 already but they where not found/reportet? I don't think so?
So are there any hints to start searching for it?
从VS2017开始,VS有了一个不错的内存分析工具,可以用来查找内存泄漏。
在VS2019调试项目时(记得打断点),打开Debug --> Windows --> 显示诊断工具--> 选择内存使用
然后调试代码,遇到断点的时候,在Memory Usage[上点击Take snapshot =40=] window.
之后,点击图标进入内存分析,就可以找到问题了
您也可以参考one official document and two official document获取提示。
=========================================
DeLeaker 成功了,帮我找到了漏洞。毕竟我发现了一些没有设置 #define new DEBUG_NEW
的 .cpp-files。修复之后,发现问题就很容易了。感谢您的帮助,Artem Razin