【问题标题】:how to debug possible heap corruption?如何调试可能的堆损坏?
【发布时间】:2012-07-24 17:54:32
【问题描述】:

VS2008,C。还使用了一些预构建的库。 当我在调试器中单步执行我的代码并遍历被调用的库函数时,我得到了这个:

HEAP[unit_test.exe]:堆缺少提交范围内的最后一个条目 35c70 Windows 在 unit_test.exe 中触发了断点。

这可能是由于堆损坏,这表明存在错误 unit_test.exe 或它已加载的任何 DLL。

这也可能是由于用户在 unit_test.exe 有 重点。

输出窗口可能有更多的诊断信息。

关于如何调试的任何想法?

更新:我重构了代码,发现在执行 printf() 时出现了弹出窗口。当有一个 free() 时,我也得到它。我注释掉了这些行,现在当有一个 malloc() 时,我得到了堆损坏弹出对话框。

【问题讨论】:

  • 您应该更具体:您使用的是哪个库和哪个函数?
  • 有几个选项可供您使用,具体取决于您的代码到底是什么样的。如果您直接分配和修改堆空间,那么您可以在调试器中在您的一个指针上设置一个观察点,并尝试查看您的某些操作是否在做他们不应该做的事情,例如溢出缓冲区。
  • @AlcoJaguar 我正在调用 malloc 和免费(平台是 Windows XP)。你的意思是把手表放在所有的指针上吗?
  • 我不会说所有的指针,因为这取决于您的应用程序,可能需要筛选大量信息。您可能首先要做的是将调查范围缩小到相对较小的代码段,当您输入它时,没有堆损坏的迹象,而当您退出时,您会遇到错误。那将是在指针上设置观察点的好地方。
  • 您是否使用应用程序验证程序来测试堆损坏? Application Verifier 是 Microsoft 提供的免费工具,可帮助识别资源泄漏和堆损坏。您可以在 url 找到 App Verifier:microsoft.com/en-us/download/… 您可以从technet.microsoft.com/en-us/library/bb457063.aspx 了解如何启用它以解决堆损坏和其他问题。这是我能想到的唯一可能对您有用的东西。

标签: c windows-xp heap-corruption


【解决方案1】:

我建议您首先使用应用程序验证程序来测试堆损坏。 Application Verifier 是 Microsoft 提供的免费工具,可帮助识别资源泄漏和堆损坏。您可以在 url 找到 App Verifier:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=20028 您可以从http://technet.microsoft.com/en-us/library/bb457063.aspx 了解如何启用它以解决堆损坏和其他问题

在这些情况下通常很有用。

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2017-06-07
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多