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

Windbg 切换到内核转储中的用户堆栈,windbg,callstack,usermode,Windbg,Callstack,Usermode,在进行后期调试时,是否有办法切换到内核转储中特定进程的用户模式 我记得在使用.process命令进行实时调试时这样做。.process也可以在内核转储中工作。首先,您可以使用 !process 0 0 myprocess.exe .process <address> 然后使用 !process 0 0 myprocess.exe .process <address> .process 其中是处理后的十六进制数 请注意,您仍然在进行内核调试,并且只有该进程的物理内

在进行后期调试时,是否有办法切换到内核转储中特定进程的用户模式


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

.process
也可以在内核转储中工作。首先,您可以使用

!process 0 0 myprocess.exe
.process <address>
然后使用

!process 0 0 myprocess.exe
.process <address>
.process
其中是处理后的十六进制数


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

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

我有一篇文章讨论了与此相关的问题,以及在实时和崩溃转储调试场景中执行此操作的最佳方法:

扩展提供了一种方便的方式,通过DML标记中绘制的菜单切换到用户模式进程:

  • 查找进程ID

    !进程0 0进程.exe

  • 使用ProcessID查找ThreadID

    !流程

  • 切换到线程

    .thread/p/r