通过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
你可以帮我修理一下吗?如何追踪错误的位置?
答案 0 :(得分:8)
这将返回每个线程的堆栈跟踪,您将能够看到托管跟踪的堆栈跟踪:
~*e !clrstack
答案 1 :(得分:6)
您可以输入!pe来获取异常,或者输入〜#s来切换到故障线程。 !clrstack应该可以工作。
答案 2 :(得分:2)
由于Remus指出当前线程不是托管线程。 〜关于windbg会给你一个线程列表,如果你仔细观察(我的坏监视器使我的情况变得更糟:P)有一个。 (点)当前线程之前。您需要将其更改为托管线程 - 您可以通过~s执行此操作。
现在我将调用调试大师来帮助我 - 如何找到哪个线程是托管线程?一位同事告诉我,通常线程0是一个托管的,我能够逃脱直到这个问题:|