C# 使用windbg进行.NET转储分析
我正在使用windbg和扩展调试.NET3.5CLR转储。 发生异常的代码如下所示:C# 使用windbg进行.NET转储分析,c#,.net,debugging,windbg,crash-dumps,C#,.net,Debugging,Windbg,Crash Dumps,我正在使用windbg和扩展调试.NET3.5CLR转储。 发生异常的代码如下所示: try { ... } catch { ... } catch { ... } finally { ... // exception I found in the dump happened here. ... } 好的,用!pe命令我有一个异常。这是一个空引用异常,但问题的真正原因是在try或某个捕获中的某个位置,在finally块中发生的异常被这个异常掩盖。应用程序在压力测试中崩溃了,所以创
try
{
...
}
catch
{
...
}
catch
{
...
}
finally
{
...
// exception I found in the dump happened here.
...
}
好的,用!pe
命令我有一个异常。这是一个空引用异常,但问题的真正原因是在try或某个捕获中的某个位置,在finally块中发生的异常被这个异常掩盖。应用程序在压力测试中崩溃了,所以创建一个复制程序并不容易,所以转储就是我的一切
所以,这里是所有windbg/.NET内部专家的问题。你知道我如何在finally块中获取在此之前发生的异常吗。我在堆栈上看不到任何有用的东西(!dso
命令),这或多或少就是我的psscor2知识的终点:)
谢谢
不,那个信息落入了比特桶。运行带有调试器的压力测试是一个非常简单的解决方法。让它在第一次机会出现异常时停止。不幸的是,运行压力测试在这里不是一个选项。这是一种复杂的基础设施,测试是在实验室里进行的。除了复制品,我什么都没有。我希望上面抛出的异常仍然在堆栈/堆的某个地方。我想它仍然在垃圾堆的某个地方,但我只是不知道在哪里可以找到它。谢谢你的评论。如果你还没有准备好,试试看!用于转储文件的dae(DumpAllExceptions)和“!Analysis”命令。终于有机会了!分析-v。也许你在输出中看到了什么,我试过了!dae!analyze不能很好地处理托管转储。最后,我在一个十六进制编辑器中打开了一个转储文件,并搜索了“exception”关键字和一些关于异常的方法。它只发现了那些NullReferenceException,所以Hans Passant是正确的。谢谢。如果幸运的话,您可以在堆上找到实例。但是,您基本上必须在堆中搜索任何异常的实例(请记住,您将发现误报)。我不知道如何将隐藏的异常链接到finally块中的异常,但是您可以从堆栈跟踪中找到它。