3

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

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

4

5 回答 5

7

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

!process 0 0 myprocess.exe

然后使用切换到该过程

.process <address>

其中<address>是PROCESS之后的十六进制数。

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

于 2014-03-07T22:28:08.940 回答
7

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

于 2014-04-01T14:35:28.513 回答
4
  1. 查找进程 ID

    !process 0 0 process.exe 在此处输入图像描述

  2. 使用 ProcessID 查找 ThreadID

    !process <ProcessID> 在此处输入图像描述

  3. 切换到线程

    .thread /p /r <ThreadID>

于 2016-08-30T09:08:51.577 回答
3

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

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

于 2014-04-03T16:57:32.920 回答
1

!dml_proc扩展提供了一种方便的方式来切换到用户模式进程,并使用 DML 标记中绘制的菜单:示例

于 2016-01-14T11:27:22.900 回答