切换到内核转储中的用户堆栈

时间:2014-03-07 12:09:52

标签: windbg callstack usermode

有没有办法在进行事后调试时切换到内核转储中特定进程的用户模式?

我记得在使用.process命令进行实时调试时这样做。

5 个答案:

答案 0 :(得分:7)

作为Thomas的回复的后续内容,您可以使用.process / p / r。这将设置您的usermode上下文并重新加载usermode符号。这将使您在此新进程上下文中的后续线程命令能够显示堆栈的用户模式端。如果您通过使用.thread / p / r了解目标线程,则可以跳过进程导航。

答案 1 :(得分:4)

.process也适用于内核转储。首先,您可以使用

找到您的流程
!process 0 0 myprocess.exe

然后使用

切换到该进程
.process <address>

其中&lt; address&gt; PROCESS 之后的十六进制数。

请注意,您仍然是内核调试,并且您只有该进程的物理内存可用(a.k.a. Working Set)。大多数虚拟地址空间可能已交换到磁盘,您无法像在用户模式下那样分析该进程(特别是对于需要完整.NET堆的.NET程序)。

答案 2 :(得分:4)

  1. 查找ProcessID

    !process 0 0 process.exe enter image description here

  2. 使用ProcessID查找ThreadID

    !process <ProcessID> enter image description here

  3. 切换到主题

    .thread /p /r <ThreadID>

答案 3 :(得分:3)

我有一篇文章讨论了有关此问题以及在实时和故障转储调试方案中执行此操作的最佳方法:

http://www.osronline.com/article.cfm?id=576

答案 4 :(得分:1)

!dml_proc扩展程序提供了一种使用DML标记绘制的菜单切换到用户模式进程的便捷方式:example