2011-11-09 41 views
3

我正在使用windbg和psscor2.dll扩展名来调试.NET 3.5 CLR转储。 代码中的例外发生是这样的:使用windbg .NET转储分析

try 
{ 
... 
} 
catch 
{ 
... 
} 
catch 
{ 
... 
} 
finally 
{ 
... 
// exception I found in the dump happened here. 
... 
} 

好了,用!pe命令我有一个例外。它是一个空引用异常,但问题的真正原因是在上面某处,在try或catch中的一个地方,并且在finally块中被这个异常所掩盖。应用程序在压力测试中崩溃,因此创建repro并不容易,所以转储就是我拥有的一切。

因此,所有windbg/.NET内部大师的问题都在那里。你有什么想法,我怎么能够在finally块之前得到这个之前发生的异常。我没有看到任何有用的堆栈(!dso命令),这或多或少是我的psscor2知识结束:)。

谢谢。

+3

不,信息掉进位桶。用附加的调试器运行压力测试是一个非常简单的解决方法。停止一次机会例外。 –

+1

不幸的是,在这里运行压力测试不是一种选择。这是一种复杂的基础设施,测试在实验室中运行。我什么都没有,只有repro。我希望上面抛出的异常仍然在栈/堆的某个地方。我想它仍然在转储的某个地方,但我根本不知道在哪里可以找到它。感谢您的评论。 – Klark

+0

如果还没有完成,请对转储文件尝试!dae(DumpAllExceptions)和“!Analysis”命令。最后!分析-v。也许你会在输出中看到一些东西。 –

回答

1
  1. 将windbg attatch用于您的进程,执行“sxe clr”并等待任何空引用第一次机会异常并使用!pe命令检查调用堆栈。
  2. 您可以使用“!dumpheap -type Exception”来查找包含单词“Exception”的对象,然后查找NullReferenceException对象,使用.foreach(ex {!dumpheap -short -mt}){!pe ex }
  3. 您可以从!DSO找到参数或局部变量或!clrstack -a