WinDbg是否能够检测由于无效向下转换导致的内存堆损坏?

时间:2012-01-05 16:05:51

标签: c++ windbg

这是我刚发现的一个错误!万岁。该错误是由于错误的向下转换造成的,事实上我使用的是static_cast而不是dynamic_cast

我的应用程序非常庞大且多线程,并与其他应用程序交互。因此调试非常困难。我尝试使用WinDbgGFlagsApplication Verifier而没有结果。当然因为我不知道如何使用这些工具。

使用像WinDbg这样的工具,是否可以通过无效的向下转换找到内存堆损坏?如果是,怎么样?

2 个答案:

答案 0 :(得分:10)

Windbg!heap -s -v命令可以显示损坏的堆

0:008> !heap -s -v

  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 
                (k)     (k)    (k)     (k) length      blocks cont. heap 
-----------------------------------------------------------------------------
.ERROR: Block 001842e8 previous size 0 does not match previous block size 4
HEAP 00140000 (Seg 00140640) At 001842e8 Error: invalid block Previous

答案 1 :(得分:1)

编辑:评论明确表示非Windows选项不可行。在那种情况下,我之前有过Purify的好运,但不幸的是它是$$$。但是,我不熟悉其他Windows内存检查工具。

就这个特定情况而言,只要您发现自己向下倾斜,请至少花一分钟考虑可以消除需求的备用界面或设计。编译器错误和警告以及可靠的设计可以发现许多错误,否则需要花费数小时才能找到。