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

Is WinDbg able to detect memory heap corruption due to invalid downcasting?

本文关键字:转换 损坏 内存 无效 是否 检测 于无效 WinDbg      更新时间:2023-10-16

这是我刚刚发现的一个bug!好极了这个错误是由于不正确的下转换造成的,事实上我使用的是static_cast而不是dynamic_cast。

我的应用程序很大,是多线程的,可以与其他应用程序交互。所以调试非常困难。我尝试过使用WinDbg、GFlags和应用程序验证程序,但没有结果。当然,因为我不知道如何使用这些工具。

使用像WinDbg这样的工具,有可能发现由于无效的下转换而导致的内存堆损坏吗?如果是,如何?

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

EDIT:注释清楚地表明非Windows选项是不可行的。在这种情况下,我以前在Purify上运气不错,但不幸的是它是$$$。不过,我不熟悉其他Windows内存检查工具。

对于这种特定的情况,无论何时你发现自己情绪低落,都要花至少一分钟的时间思考一个可以消除这种需求的替代界面或设计。编译器错误和警告,以及一个可靠的设计可以发现很多错误,否则需要数小时才能找到。