6

通过 Adplus,我附加了一个流程(在我的 iis 中我运行了一个网站)

C:\Program Files (x86)\Debugging Tools for Windows (x86)>ADPlus -crash -pn w3wp .exe -o C:\dumps

以下是重现该网站的 stackoverflow 异常的代码:

protected void Page_Load(object sender, EventArgs e)
{

}
public void Hello()
{
    Hello();
}

protected void Button_Test_Click(object sender, EventArgs e)
{
    Hello();
}

为我创建的转储位于:

C:\Dumps\Crash_Mode__Date_05-04-2012__Time_21-44-2020\PID-12452__W3WP.EXE_DefaultAppPool__1st_chance_Process_Shut_Down__full_2bc0_2012-05-04_21-45-53-704_30a4

我在 windbg 中打开了这个转储并运行了这些命令

0:000> .loadby sos clr
0:000> !clrstack

我收到以下消息

Unable to walk the managed stack. The current thread is likely not a 
managed thread. You can run !threads to get a list of managed threads in
the process

你能帮我修一下吗?如何追踪错误的位置?

4

4 回答 4

9

这将返回每个线程的堆栈跟踪,您将能够看到托管线程的堆栈跟踪: ~*e !clrstack

于 2014-05-05T15:22:06.643 回答
6

您可以键入 !pe 来获取异常,或者键入 ~#s 来切换到故障线程。!clrstack 应该可以工作。

于 2012-05-07T22:25:31.280 回答
2

正如 Remus 指出的,当前线程不是托管线程。~ 在 windbg 上会给你线程列表,如果你仔细观察(我的坏显示器让我更糟:P)有一个 . (点)在当前线程之前。您需要将其更改为托管线程 - 您可以通过 ~s.

现在我将请调试大师来帮助我 - 如何找到哪个线程是托管线程?一位同事告诉我,通常线程 0 是托管的,我能够逃脱,直到这个问题:|

于 2012-11-16T00:19:16.453 回答
0

只需按照 ms 教程: https ://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-managed-code

描述了如何为托管代码和两种方案加载所需扩展的正确版本:1)从同一台机器转储和 2)从其他机器转储。

于 2021-12-25T20:32:26.160 回答