我正在完成由其他人启动的UWP应用。该应用经常崩溃,我总是在 App.g.i.cs
结束if (global::System.Diagnostics.Debugger.IsAttached)
global::System.Diagnostics.Debugger.Break();
然后我必须说"不,不要启动调试器"并关闭2个窗口。
是否有某个地方我可以进行大量尝试/捕获,以便每次发生这种情况时我都不必重新启动应用程序?我无法在AppShell
或App
中找到任何内容。
或者我是否必须在每个事件处理程序中放置一个try / catch?
答案 0 :(得分:9)
如果您希望每次遇到未处理的异常时都避免启动新调试器并重新启动应用程序,则可以使用Application.UnhandledException event并将事件参数的Handled属性设置为true,如下所示:< / p>
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
this.UnhandledException += (sender, e) =>
{
e.Handled = true;
System.Diagnostics.Debug.WriteLine(e.Exception);
};
}
UnhandledException 事件用于通知应用程序有关XAML框架或Windows运行时遇到的异常但未被应用程序代码处理的异常。
通常在触发 UnhandledException 事件后,Windows运行时终止应用程序,因为未处理异常。应用程序代码对此有一些控制:如果 UnhandledException 事件处理程序将事件参数的Handled属性设置为 true ,那么在大多数情况下应用程序将不被终止。
有关详细信息,请参阅Application.UnhandledException event的备注和博客:Strategies for Handling Errors in your Windows Store Apps。
答案 1 :(得分:1)
据我所知,你最不能做你想要做的事情(大尝试捕捉障碍),并且出于所有意图和目的,你甚至不应该考虑这种可能性。
首先尝试确定应用程序崩溃的原因,在什么页面上,当您尝试某些特定内容时,每次都是相同的事情然后您可以尝试捕获该特定页面上的某些方法并确定导致崩溃的原因
答案 2 :(得分:0)
您可以在主应用中尝试/捕获以捕获所有异常。显示的是使用Xamarin Forms DisplayAlert的示例:
try
{
//throw new Exception("gone and done it");
MyMainProgram();
}
catch (Exception ex)
{
await DisplayAlert("Whoops!", ex.Message, "ok");
throw ex;
}
您可以通过取消注释&#34;抛出新的异常&#34;来测试它。执行停止时会发出必须回答的警报,然后继续抛出异常以防止执行损坏的代码。
答案 3 :(得分:0)
如果要处理原因而不是症状,则应在调试器设置中启用第一次机会异常。然后调试器应该在异常的源处中断,而不是在全局处理程序中。然后,您可以直接解决问题的根本原因。
运送具有全局处理程序的应用程序盲目地将每个例外设置为&#34;处理&#34;即使你不知道为什么它的失败不是一个好的解决方案。