有没有办法在进行事后调试时切换到内核转储中特定进程的用户模式?
我记得在使用.process命令进行实时调试时这样做。
答案 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)
查找ProcessID
!process 0 0 process.exe
使用ProcessID查找ThreadID
!process <ProcessID>
切换到主题
.thread /p /r <ThreadID>
答案 3 :(得分:3)
我有一篇文章讨论了有关此问题以及在实时和故障转储调试方案中执行此操作的最佳方法:
答案 4 :(得分:1)