c - 查找上次释放内存的位置?

标签 c debugging memory profiler

非常一般: 有没有一种简单的方法可以判断发生访问冲突时哪一行代码最后释放了一 block 内存?

不太一般: 我对分析器的理解是它们覆盖了分配和释放过程。如果这是真的,他们是否会恰好存储最后释放一段内存的代码行,以便当它后来因访问冲突而崩溃时,您知道最后释放它的是什么?

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

最佳答案

是的!

安装 Windows Debugging Tools并使用 Application Verifier .

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

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

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

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

0:004> !heap -p -a 0x0C46CFE0

这也会转储信息。

进一步阅读:

关于c - 查找上次释放内存的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691794/

相关文章:

debugging - Safari JavaScript 控制台不执行 JS 或在某些页面上显示输出

memory - Redis 服务器的足迹

c# - 确保表单例份验证在浏览器关闭时注销

c# - 是否可以为 Visual Studio 2010 编写 Debugger Visualizer 来显示 64 位 .NET 程序?

c++ - 程序部署失败

PHP - 执行长脚本时可能遇到的障碍

c++ - 可以在 C++ 中优化掉未使用的数据成员吗

c - 预期输出和实际输出不匹配,请解释代码背后的逻辑

c - 可执行文件未运行

c - 在 C 函数中传递和更改数组内部