【问题标题】:How to get WPF application to break in code?如何让 WPF 应用程序中断代码?
【发布时间】: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(以及您希望在抛出时中断的任何其他异常类型)的抛出中断。否则,也许您依赖于缺少高级处理程序,以便未捕获异常,但现在有一个。如果你在投掷时破门,你也可以上前一步找出处理者在哪里;如果它在您自己的代码中,您也许可以摆脱它(可能有条件地作为调试版本)。
  • 谢谢,克雷格,这绝对解决了问题。谢谢!

标签: .net wpf vb.net


【解决方案1】:

异常很可能是由您的 XAML 中的某些错误引发的,而不是在您的 C# 代码中。

要了解如何获取有关 XAML 中错误的更多信息,请阅读这篇文章:

How to: Display WPF Trace Information

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2010-12-05
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多