这是我刚发现的一个错误!万岁。该错误是由于不正确的向下转换造成的,实际上我使用的是static_cast而不是dynamic_cast。WinDbg能够检测由于无效向下转换造成的内存堆损坏吗?
我的应用程序非常大,多线程并与其他应用程序交互。所以调试非常困难。我试图使用WinDbg,GFlags和Application Verifier没有结果。当然是因为我不知道如何使用这些工具。
使用像WinDbg这样的工具可以找到由于无效向下转换而导致的内存堆损坏吗?如果是,如何?
这是我刚发现的一个错误!万岁。该错误是由于不正确的向下转换造成的,实际上我使用的是static_cast而不是dynamic_cast。WinDbg能够检测由于无效向下转换造成的内存堆损坏吗?
我的应用程序非常大,多线程并与其他应用程序交互。所以调试非常困难。我试图使用WinDbg,GFlags和Application Verifier没有结果。当然是因为我不知道如何使用这些工具。
使用像WinDbg这样的工具可以找到由于无效向下转换而导致的内存堆损坏吗?如果是,如何?
WinDBG的!堆-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
编辑:评论明确表示,非Windows选项不可行。在那种情况下,我之前和Purify有过好运气,但不幸的是它是$$$。但我不熟悉其他Windows内存检查工具。
关于这个特定情况,无论何时您发现自己是向下倾斜的,至少花一分钟时间思考一个替代接口或设计,以消除这种需求。编译器错误和警告,以及一个可靠的设计可以发现很多错误,否则将需要几个小时才能找到。
为Windows用户推荐valgrind? – PlasmaHH 2012-01-05 16:17:27
@Mark B:所以你确认valgrind有可能在崩溃时输入应用程序的转储,并输出导致问题的代码行吗? – Guillaume07 2012-01-05 16:19:44
@PlasmaHH:是的,但的确如此,但我认为在windows下有相应的工具 – Guillaume07 2012-01-05 16:20:18
什么错误,你才发现?这篇文章毫无意义。 – 2012-01-05 17:27:48
@Lightness:哎,真的吗? – Guillaume07 2012-01-06 08:14:40
真的是什么?你的前两句话没有意义。他们讨论了一些你没有提出的问题。什么错误? – 2012-01-06 15:19:35