当我使用它进行调试并附加到我机器上的特定应用程序时,我遇到了一个问题,即 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 感到惊讶,这看起来并不有效。
任何帮助表示赞赏。
谢谢!亚伦