0

当我使用它进行调试并附加到我机器上的特定应用程序时,我遇到了一个问题,即 cdb 或 windbg 经常挂起,但并非一直挂起。

我发现这篇文章:http ://www.nynaeve.net/?p= 164 谈到了符号加载竞争条件是问题,但我可以强制加载符号,实际上有一个断点在应用程序工作,并且仍然让它挂在别处。

当我使用另一个调试器附加到它时,这是来自 cdb 本身的堆栈:

ntdll!NtReadFile
kernel32!ReadFile
cdb!ReadNonConLine
cdb!ConIn
cdb!MainLoop
cdb!main

!analyze 报告 APPLICATION_HANG_BusyHang 是问题桶,而“ReadNonConLine”是有问题的函数。

就堆栈而言:

ffffffff`fffffffe 00000000`00000000 00000001`3f641498 00000000`0014ea50 : kernel32!ReadFile+0x86
00000000`000002a4 00000000`0014ebb0 00000000`00001000 00000000`00000000 : cdb!ReadNonConLine+0x6d

ReadNonConLine 将 0014ebb0 处的字符串“g”作为参数传递,这可能是我在悬挂断点处的命令的一部分(类似于 bp foo“dt a; g”)

ReadFile 将句柄作为其第一个参数。但是,我对值 -2 感到惊讶,这看起来并不有效。

任何帮助表示赞赏。

谢谢!亚伦

4

1 回答 1

1

我正在使用 64 位工具调试 32 位应用程序,所以我决定切换到 32 位调试工具,从那以后我就再也没有挂起过。

有问题的应用程序在图形上非常密集,我猜这是在调试环境中与 WoW64 的交互很差......

于 2009-08-04T22:25:31.473 回答