Windbg:无法遍历托管堆栈

时间:2012-05-04 16:33:12

标签: c# asp.net .net windbg adplus

通过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
你可以帮我修理一下吗?如何追踪错误的位置?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

由于Remus指出当前线程不是托管线程。 〜关于windbg会给你一个线程列表,如果你仔细观察(我的坏监视器使我的情况变得更糟:P)有一个。 (点)当前线程之前。您需要将其更改为托管线程 - 您可以通过~s执行此操作。

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