我们有一个WPF应用程序,我们已经部署到客户。但是,应用程序随机致命崩溃与一个“意外错误”对话框上的客户的计算机。我们需要能够看到异常消息,最好是堆栈跟踪,但因为它是随机崩溃,我们不知道我们应该把try/catch检查放在哪里,这样我们才能记录它。我们使用NLog来记录。我的问题是,我们有没有办法配置NLog来捕获代码没有处理的所有异常,或者有没有其他方法来实现这一点?
kmynzznz1#
为什么不放置一个全局try/catch块来覆盖整个代码呢?由于它是WPF应用程序,因此可能需要进行一些更改。不要让WPF自动打开主窗口,而是删除App.xaml文件,然后从应用程序起始点(在try/catch内)通过代码打开窗口。请注意,这不是一个好的实践(就像捕获所有异常通常是不好的),但可能是一个临时的解决方案,以找到崩溃发生的位置。编辑:我还邀请你阅读一个关于WPF中全局try/catch块的相关问题的答案,其中有一些有用的东西我在写答案的时候不知道。
cgh8pdjw2#
<Application x:Class="WpfTutorialSamples.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" StartupUri="WPF Application/ExceptionHandlingSample.xaml"> <Application.Resources> </Application.Resources>
向App.xaml文件添加代码,然后向App.xaml.cs添加代码
using System; using System.Windows; namespace WpfTutorialSamples { public partial class App : Application { private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { MessageBox.Show("An unhandled exception just occurred: " + e.Exception.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Error); e.Handled = true; } }}
有关详细信息,请阅读Handling exceptions in WPF文章
2条答案
按热度按时间kmynzznz1#
为什么不放置一个全局try/catch块来覆盖整个代码呢?
由于它是WPF应用程序,因此可能需要进行一些更改。不要让WPF自动打开主窗口,而是删除App.xaml文件,然后从应用程序起始点(在try/catch内)通过代码打开窗口。
请注意,这不是一个好的实践(就像捕获所有异常通常是不好的),但可能是一个临时的解决方案,以找到崩溃发生的位置。
编辑:我还邀请你阅读一个关于WPF中全局try/catch块的相关问题的答案,其中有一些有用的东西我在写答案的时候不知道。
cgh8pdjw2#
向App.xaml文件添加代码,然后向App.xaml.cs添加代码
有关详细信息,请阅读Handling exceptions in WPF文章