我有一个Visual Studio 2010解决方案,其中包含C#(托管),C ++ / CLI(非托管)和纯C ++(本机)项目。我想在所有3个项目中执行内存泄漏检测,或者至少围绕本机代码执行内存泄漏检测:
我已经尝试过使用英特尔Inspector XE 2011,但它太慢了......做一个简单的事情就像只是初始化我的系统并花了很长时间才完成我还没有完成它。当我在没有IXE 2011的情况下运行我的系统时,初始化我的系统需要不超过10-15秒,而使用IXE我们让它运行几个小时并且它不会超过初始化。我试图排除某些库被分析,但它绝对没有效果。
我尝试过使用Visual Leak Detector,但在完成运行后它说它找不到任何内存泄漏。我对这个结果持怀疑态度,所以我故意在经常运行的函数中放置一段代码以确保存在内存泄漏:
int* memoryLeak = new int;
我再次使用VLD运行,但它吐出了相同的消息。我正在考虑覆盖new
/ delete
运算符,甚至只覆盖malloc
/ free
,但我想确保在我之前已经用尽所有其他选项深入研究。
如何使用Visual Studio 2010分析我的本机C ++库的内存使用情况?是否有其他可能有效的工具或技术(即使它们没有与VS2010集成)?
答案 0 :(得分:2)
在.NET中,即使你使用托管对象,也可能会有一些东西永远不会被处理掉(请查看一些示例:Memory Leak in C#)。
关于原生部分,您可以使用两种不同的方法:
使用不同的内存分析器软件,其中许多都列在此处:Is there a good Valgrind substitute for Windows?
更改源代码以使用debug malloc / new并在代码中打印分配的位置:http://www.flipcode.com/archives/Detecting_Memory_Leaks.shtml
答案 1 :(得分:1)
进行单元测试,测试单元是否存在内存泄漏: http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx
在分配对象之前获取第一个内存状态,在释放之后获取第二个内存状态。比较你的记忆状态。
此外,您可以尝试使用其他分析器,如valgrind,devpartner。