【问题标题】:switching to user stack in kernel dumps在内核转储中切换到用户堆栈
【发布时间】:2014-04-10 13:53:41
【问题描述】:

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

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

【问题讨论】:

    标签: windbg callstack usermode


    【解决方案1】:

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

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

    然后使用

    切换到该进程
    .process <address>
    

    其中

    PROCESS 之后的十六进制数。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        1. 查找进程ID

          !process 0 0 process.exe

        2. 使用 ProcessID 查找 ThreadID

          !process &lt;ProcessID&gt;

        3. 切换到线程

          .thread /p /r &lt;ThreadID&gt;

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多