如何在即时窗口中评估未处理的异常属性

时间:2013-11-06 22:20:05

标签: c# visual-studio-2010 debugging exception immediate-window

我有一个未处理的异常导致出现“异常助手”对话框。

当我点击View Detail ...时,异常本身在其自定义对象模型中有一些值,这些值不会在属性网格中进行评估,但我知道我可以在即时窗口中对其进行评估。 (在这种情况下,属性网格不会让我深入到集合中,但可能还有其他情况)

如果不改变代码来添加try块,我怎样才能进入即时窗口并评估无法处理的异常上的表达式?

答案可能是我还不知道的一些魔法,比如?this.CurrentException或

涉及System.Diagnostics.StackFrame或知道的事情。聪明的东西。

有一种方法可以使用调试器线程导航到它,但这很复杂。如果您可以使用可能是解决方案的包装器来实现它并使其变得简单。

3 个答案:

答案 0 :(得分:11)

您是否尝试将调试器设置为在抛出异常时中断,而不是在用户未处理的情况下设置?

要执行此操作,请转至VS2010主菜单,然后选择“调试”菜单 接下来选择'例外...'

这会产生如下对话框: Debug -> Exceptions.. menu

选择Thrown列

现在,当您抛出异常时,您应该能够在立即窗口中评估局部变量。

在Locals选项卡中,我可以看到$ exception变量: Local variables contains $exception

我可以在即时窗口中使用“$ exception”变量: Immediate Window accessing $exception

<强>更新 另外,为了便于切换异常处理,我建议使用Exception Breaker Visual Studio Extension,它允许您在工具栏上打开和关闭异常处理,而不必钻入调试菜单。

答案 1 :(得分:1)

我不了解Visual Studio 2010,但在Visual Studio 2012中发生未处理的异常时,它显示在Locals窗口中,名称为$exception

答案 2 :(得分:0)

  

有一个不会在属性网格中评估的属性

如果无法评估该属性,调试器将无法帮助您,如您所见;因此,即时窗口也会这样做。

我有一个无效的属性,以至于它会在VS2010中抛出异常并导致调试器在我尝试评估时崩溃。从属性返回的空值对调试器来说并不好。

我建议您对此问题进行old school并将Trace.Write放在属性和其他位置,并在输出窗口中监控写入报告。

How to trace and debug in Visual C#