找到最后释放内存的位置?

Syd*_*ius 4 c memory debugging profiler

非常一般: 当发生访问冲突时,是否有一种简单的方法可以告诉哪一行代码最后释放了一块内存?

不太通用: 我对剖析器的理解是它们覆盖了分配和释放过程.如果这是真的,他们可能会碰巧存储最后释放一段内存的代码行,这样当它因为访问冲突而后来崩溃时,你知道最后释放它的是什么吗?

细节: Windows,ANSI C,使用Visual Studio

i_a*_*orf 7

是!

安装Windows调试工具并使用Application Verifier.

  1. 文件 - >添加应用程序,选择您的.exe
  2. 在"基本"下,选择"内存和堆".
  3. 在ntsd(ntsd yourprogram.exe)下运行程序的调试版本.
  4. 重现这个bug.

现在,当您发生崩溃时,您将从AppVerifier获得调试器中的其他信息.使用!avrf(可能需要很长时间才能运行(分钟)),它会尝试尽可能多地提供有用的信息.

您可以在内存地址上使用dps命令来获取所有存储的堆栈信息(分配,释放等).

您还可以在内存地址上使用!heap命令:

0:004> !heap -p -a 0x0C46CFE0
Run Code Online (Sandbox Code Playgroud)

哪个也会转储信息.

进一步阅读: