gpt4 book ai didi

.net - 无法在 WinDbg 中切换到托管线程

转载 作者:行者123 更新时间:2023-12-04 02:10:21 27 4
gpt4 key购买 nike

我正在使用 SOS 使用 WinDbg 探索 ASP.NET 进程的小型转储。如果我列出托管线程,我会看到一个正常的线程列表:

0:000> !threads
ThreadCount: 8
UnstartedThread: 0
BackgroundThread: 8
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive Lock
ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception
XXXX 1 12bc 00000000001441f0 1808220 Disabled 0000000140b10fc8:0000000140b12f20 000000000017f6e0 0 Ukn (Threadpool Worker)
XXXX 2 1334 0000000000152f90 b220 Enabled 0000000000000000:0000000000000000 0000000000121b90 0 Ukn (Finalizer)
XXXX 3 138c 000000000017b100 80a220 Enabled 0000000000000000:0000000000000000 0000000000121b90 0 Ukn (Threadpool Completion Port)
XXXX 4 81c 000000000017eb40 1220 Enabled 0000000000000000:0000000000000000 0000000000121b90 0 Ukn
XXXX 5 5e4 00000000001bccd0 880a220 Enabled 0000000000000000:0000000000000000 0000000000121b90 0 Ukn (Threadpool Completion Port)
XXXX 6 11e4 0000000004bee280 180b220 Disabled 0000000000000000:0000000000000000 0000000000121b90 0 Ukn (Threadpool Worker)
XXXX 7 73c 0000000004c267e0 180b220 Disabled 0000000140b0f158:0000000140b10f20 000000000017f6e0 3 Ukn (Threadpool Worker) System.StackOverflowException (000000007fff0138) (nested exceptions)
XXXX 8 21c 00000000001ad1c0 180b220 Enabled 0000000000000000:0000000000000000 0000000000121b90 0 Ukn (Threadpool Worker)

但是,如果我尝试切换到线程 7(有异常的线程),我会得到以下信息:
0:000> ~7s
^ Illegal thread error in '~7s'

尝试切换到任何托管线程时会发生这种情况。我不知道从哪里开始。我真正需要做的是查看来自该托管线程的堆栈跟踪。

最佳答案

!threads 的输出显示线程的三个不同 ID(WinDbg 的 ID、托管 ID 和 native ID)。您需要使用的那个是最左边的。如您所见,转储中的所有线程都被标记为 XXXX这意味着它们不再可用。这是正常的,但我确实觉得奇怪的是,所有线程都被标记为这样。进程关闭期间是否进行了转储?

根据评论更新

您绝对应该能够通过 adplus -crash 获得有用的转储文件。 ,但显然这里的一切都有些困惑,因为即使是终结器线程也被终止了。我注意到其中一个线程有一个 StackoverflowException,这可能就是你想要的。要获得它,您可以在第一次机会异常时创建转储,然后看看是否能以这种方式获得更有用的东西。 Adplus 有一个 FullOnFirst标志。

额外更新

好吧,这很奇怪。还有一些其他的事情要尝试。

  • 挂载到崩溃前的进程,就让它g .这应该会在异常时中断调试器。如果需要,您可以设置一个事件来将任何异常打印到控制台。使用 sxe -c "!pe; !clrstack; gn" clr .
  • Adplus 曾经是一个 vbs 脚本,但不久前它被重写为可执行文件。我已经看到新版本的一些小问题,但没有像这样的。您可以尝试使用仍可用作 adplus_old.vbs 的旧脚本。
  • 试试 procdump来自系统内部。它支持与 Adplus 相同类型的转储选项(以及更多选项)。
  • 关于.net - 无法在 WinDbg 中切换到托管线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11416313/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com