【问题标题】:ProcDump dumps wrong threadProcDump 转储错误的线程
【发布时间】:2012-12-31 06:23:36
【问题描述】:

看起来 ProcDump 转储了错误线程的事后转储。使 ProcDump 成为 JIT 调试器:

C:\>procdump -ma -i c:\mydumps

制作了一个测试程序C++ MFC:

int* ptr = 0;
switch(message) {
...
case IDM_CRASH:
   *ptr = 23;
   break;
...

从(ProcDumpTest.exe 程序的)菜单中选择 Crash 项,应用程序崩溃并进行转储。然而,转储显示 (windbg) 一个堆栈和一个意外线程的指令指针 (eip = 7c90e514)。如何获取发生错误的线程的堆栈跟踪?

00400000 - 004a0000 ProdDumpTest.exe
07c90000 - 07c9b000 ntdll.dll

在更严重的情况下遇到了同样的问题。谢谢你的帮助! G更多

【问题讨论】:

  • 首先检查 Windbg !analyze 命令告诉你什么。如果它可以看到异常,它将选择崩溃的线程。
  • .ecxr 命令指示调试器使用与当前异常关联的上下文记录作为寄存器上下文。运行 .ecxr 后,调试器可以访问该线程最重要的寄存器和堆栈跟踪。 k* 命令显示堆栈帧。
  • ~ 命令列出一个线程(错误的线程)。 .ecxr 命令报告 Minidump... 没有异常上下文 (HRESULT 0x80004002)。我认为 procdump -ma 选项会创建一个完整的转储。似乎我在某个地方错过了重点。

标签: windows debugging windbg procdump


【解决方案1】:

.reload /f 命令后,!analyze -v 显示正确信息。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多