【发布时间】:2018-01-12 16:47:33
【问题描述】:
在 .NET 中进行调试时,我真的很喜欢在某个位置触发错误时能够直接进入我的代码。但是,在编写 WPF 应用程序时,我似乎无法访问此功能。
考虑这个简单的程序:
sub breakMe()
dim badObject as Object = nothing
getObjectString(badObject)
end sub
sub getObjectString(whatObj as object)
whatObj.toString
end sub
如果这是一个 winforms 项目,调试器将直接在“whatObj.toString”行中断,我可以进入那里的调用堆栈并跳转到任何先前的过程并检查对象值。但是,使用 WPF 时,会触发一个未处理的异常,这使得这不可能。
我已经阅读了许多可以向 WPF 添加处理程序的方法示例,这些方法允许您自定义处理异常,以便您可以查看相关的堆栈跟踪。虽然有帮助,但这仍然不如真正能够准确地进入代码中断的地方并查看对象值。
您可以添加 try 块来实现所需的结果,但在整个项目中这样做显然是不切实际的,而且似乎应该有一种简单的方法来做到这一点。也许通过强制调试器简单地绕过 WPF 图形组件的处理程序?
【问题讨论】:
-
你正在做一些可怕的、可怕的错误。断点甚至异常在 WPF 中的工作方式与在其他任何地方的工作方式相同
-
建议仔细检查您的异常设置,并确保您设置为 NullReferenceException(以及您希望在抛出时中断的任何其他异常类型)的抛出中断。否则,也许您依赖于缺少高级处理程序,以便未捕获异常,但现在有一个。如果你在投掷时破门,你也可以上前一步找出处理者在哪里;如果它在您自己的代码中,您也许可以摆脱它(可能有条件地作为调试版本)。
-
谢谢,克雷格,这绝对解决了问题。谢谢!