WinRT的。 UnhandledException处理程序。 StackTrace为null

时间:2013-06-05 09:29:47

标签: windows-runtime windows-store-apps windows-store

我在WinForms上有一个项目,代码如下:

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;

private void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{            }

e.ExceptionObject包含完整的StackTrace。

在Win Store项目中:

this.UnhandledException += (s, e) =>{                                               
{                                              
    MarkedUp.AnalyticClient.LogLastChanceException(e);
};

e.Exception.StackTrace为null。

这两个例外都是由此代码生成的:

int a=0;
....

try
{
    int i = 1 / a;
}
catch (Exception exp)
{
    throw;
}

任何想法?

2 个答案:

答案 0 :(得分:1)

您是否在调试模式下运行解决方案?当您在调试模式下运行解决方案时,App.g.i.cs文件中似乎发生了一些事情。当我在Release模式下运行示例时,堆栈跟踪在UnhandledException事件中可用。

在我的测试解决方案中,它首先在这里打破:

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

在那之后,它转到我在app.xaml.cs文件中定义的UnhandledException处理程序。在Debug中,堆栈跟踪已经消失,在Release模式下,堆栈跟踪和异常详细信息都在那里。

答案 1 :(得分:1)

MSDN上的引用表明这是一个限制:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.unhandledexception

  

一个值得注意的限制是UnhandledException事件参数不包含与从应用程序代码传播的原始异常一样多的详细信息。只要有可能,如果应用程序需要对特定异常进行特定处理,那么在传播时捕获异常总是更好,因为随后会有更多详细信息。 UnhandledException事件参数通过Exception属性公开异常对象。但是,此异常对象的类型,消息和堆栈跟踪不保证与引发的原始异常的类型,消息和堆栈跟踪相匹配。事件参数确实公开了Message属性。在大多数情况下,这将包含最初引发的异常的消息。