分析windbg中的崩溃转储

csh*_*dev 6 debugging windbg

我正在使用第三方封闭源API,它会抛出一个异常,指出"所有命名管道都很忙".

我想进一步调试(而不仅仅是单步执行),这样我才能真正了解幕后发生的事情.

我使用WinDbg转储了这个过程.我现在应该用什么命令来分析这个转储?

谢谢

dav*_*dag 15

您可以按照以下步骤操作以获取异常的概述:

!analyze -v
Run Code Online (Sandbox Code Playgroud)

现在您可以加载异常上下文记录:

.ecxr
Run Code Online (Sandbox Code Playgroud)

而现在......只需看看堆栈,寄存器,线程......

kb     ;will show you the stack trace of the crash.
dv     ;local variables
Run Code Online (Sandbox Code Playgroud)

根据您获得的线索,您应该遵循不同的方向.如果你想快速参考WinDbg,我建议你这个链接.

我希望你能找到一些有用的命令和信息.


Mic*_*bbé 5

在使用 Windbg 进行事后调试时,在决定深入挖掘的位置之前运行一些通用诊断命令会很有用。这些应该是您的第一步:

.logopen <filename>    (See also .logappend)
.lastevent             See why the process halted and on what thread
u                      List disassembly near $eip on offending thread
~                      Status of all threads
Kb                     List callstack, including parameters
.logclose
Run Code Online (Sandbox Code Playgroud)

这些命令通常为您提供所发生情况的概览,以便您可以进一步挖掘。在处理没有源代码的库的情况下,将生成的日志文件连同二进制库的构建 # 一起发送给供应商应该足以让他们将其追溯到已知问题(如果有的话)。


ste*_*eve 2

当客户端为现有管道调用 CreateFile 并且所有现有管道实例都繁忙时,通常会发生这种情况。此时CreateFile返回错误,错误码为ERROR_PIPE_BUSY。此时正确的做法是使用超时值调用 WaitNamedPipe 以等待管道实例变得可用。

当多个客户端同时尝试连接到命名管道时,通常会出现此问题。