none
关于App的UnhandledException RRS feed

  • 问题

  • 我在代码中使用了this.UnhandledException += OnUnhandledException;来截获App的异常消息,但是我发现很多情况都没有捕获到。譬如在构造函数使用

    string s = null;int i = s.Length;

    程序必然崩溃,但是永远都不会进入到OnUnhandledException里。

    只有在比如SizeChanged这些消息里调用string s = null;int i = s.Length;才会捕获到。

    我想问的是,如何才能够把大部分的异常退出的信息捕获到???

    2012年10月11日 7:14

答案

  • 这个肯定无法拿到所有类型崩溃,在他的文档说明中有写 http://msdn.microsoft.com/zh-cn/library/windows/apps/windows.ui.xaml.application.unhandledexception.aspx

    This event is only used with exceptions encountered by the XAML framework. Exceptions encountered by other Windows Runtime components or parts of the application that are not connected to the XAML framework will not result in this event being raised. For example, if a different Windows component calls into application code and an exception is thrown and not caught, the UnhandledException event won’t be raised. If the application creates a worker thread, and then raises an exception on the worker thread, the UnhandledException event won’t be raised.


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月12日 9:34
    版主

全部回复

  • VS 会添加如下的代码 在Debug时候来捕获,

    #if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
                UnhandledException += (sender, e) =>
                {
                    if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
                };
    #endif

    所以你在实际情况下,不是Debug下是可以捕获的。你换成Release 来测试:


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月12日 7:59
    版主
  • 我的意思不是说不能获取,而是无法获取所有的崩溃,也就是有些异常没有try,但是最后却没有走到

    UnhandledException 这里。

    我在这个接口里输出了日志,但是发现很多异常退出都没有记录,譬如在启动主page的构造函数调用崩溃代码等。如果是调试状态,VS会断点到崩溃的代码,可是继续运行却没有走到这个函数

    2012年10月12日 9:21
  • 这个肯定无法拿到所有类型崩溃,在他的文档说明中有写 http://msdn.microsoft.com/zh-cn/library/windows/apps/windows.ui.xaml.application.unhandledexception.aspx

    This event is only used with exceptions encountered by the XAML framework. Exceptions encountered by other Windows Runtime components or parts of the application that are not connected to the XAML framework will not result in this event being raised. For example, if a different Windows component calls into application code and an exception is thrown and not caught, the UnhandledException event won’t be raised. If the application creates a worker thread, and then raises an exception on the worker thread, the UnhandledException event won’t be raised.


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月12日 9:34
    版主
  • 不过崩溃的代码是C#写的,我奇怪的是,C#的异常都无法捕获,如果是winrt C++那边还可以理解。而且VS在debug状态都可以断点到崩溃的地方,但是这个接口却不能捕获崩溃的信息。。。。。
    2012年10月12日 9:54
  • C#代码也不是说肯定要捕获。他只关心 exceptions encountered by the XAML framework, 与语言无关。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月17日 3:17
    版主