当我不知道它可能会抛出哪里时,如何记录异常?

Posted

技术标签:

【中文标题】当我不知道它可能会抛出哪里时,如何记录异常?【英文标题】:How do I log an exception when I don't know where it might throw? 【发布时间】:2011-04-08 02:48:06 【问题描述】:

我们有一个已部署给客户的 WPF 应用程序。但是,该应用程序随机致命地崩溃,并在客户的计算机上显示“意外错误”对话框。我们需要能够看到异常消息,最好也能看到堆栈跟踪,但是因为它是随机崩溃的,所以我们不知道应该将 try/catch 检查放在哪里以便我们可以记录它。我们使用 NLog 进行日志记录。我的问题是,我们有什么方法可以配置 NLog 以捕获所有未由我们的代码处理的异常,或者其他方法?

【问题讨论】:

Globally catch exceptions in a WPF application? 的可能重复项 【参考方案1】:

为什么不放置一个覆盖整个代码的全局 try/catch 块?

由于它是一个 WPF 应用程序,因此可能需要进行一些更改。不要让 WPF 自动打开主窗口,而是删除 App.xaml 文件,然后通过代码从应用程序起点(在 try/catch 中)打开窗口。

请注意,这不是一个好的做法(就像捕获所有异常通常不好),但可能是查找崩溃发生位置的临时解决方法。


编辑:我还邀请您阅读an answer to a related question,了解 WPF 中的全局 try/catch 块。写答案时,我不知道一些有用的东西。

【讨论】:

其实,捕捉所有异常很好,只要你不忽略它们。您需要一个*** try/catch 块,在关闭之前记录致命异常。

以上是关于当我不知道它可能会抛出哪里时,如何记录异常?的主要内容,如果未能解决你的问题,请参考以下文章

每次我在 ask-cli v2 中部署我的技能时都会抛出错误

HttpClient 可以抛出哪些异常?

为啥非空列表会抛出空指针异常?

如何捕获测试中可观察订阅抛出的异常

NoSuchFieldError Java

当它应该表现得像 try/catch/finally 时,为啥使用会抛出异常?