我有一个未处理的异常导致出现“异常助手”对话框。
当我点击View Detail ...时,异常本身在其自定义对象模型中有一些值,这些值不会在属性网格中进行评估,但我知道我可以在即时窗口中对其进行评估。 (在这种情况下,属性网格不会让我深入到集合中,但可能还有其他情况)
如果不改变代码来添加try块,我怎样才能进入即时窗口并评估无法处理的异常上的表达式?
答案可能是我还不知道的一些魔法,比如?this.CurrentException或
涉及System.Diagnostics.StackFrame
或知道的事情。聪明的东西。
有一种方法可以使用调试器线程导航到它,但这很复杂。如果您可以使用可能是解决方案的包装器来实现它并使其变得简单。
答案 0 :(得分:11)
您是否尝试将调试器设置为在抛出异常时中断,而不是在用户未处理的情况下设置?
要执行此操作,请转至VS2010主菜单,然后选择“调试”菜单 接下来选择'例外...'
这会产生如下对话框:
选择Thrown列
现在,当您抛出异常时,您应该能够在立即窗口中评估局部变量。
在Locals选项卡中,我可以看到$ exception变量:
我可以在即时窗口中使用“$ exception”变量:
<强>更新强> 另外,为了便于切换异常处理,我建议使用Exception Breaker Visual Studio Extension,它允许您在工具栏上打开和关闭异常处理,而不必钻入调试菜单。
答案 1 :(得分:1)
我不了解Visual Studio 2010,但在Visual Studio 2012中发生未处理的异常时,它显示在Locals
窗口中,名称为$exception
。
答案 2 :(得分:0)
有一个不会在属性网格中评估的属性
如果无法评估该属性,调试器将无法帮助您,如您所见;因此,即时窗口也会这样做。
我有一个无效的属性,以至于它会在VS2010中抛出异常并导致调试器在我尝试评估时崩溃。从属性返回的空值对调试器来说并不好。
我建议您对此问题进行old school
并将Trace.Write放在属性和其他位置,并在输出窗口中监控写入报告。