【问题标题】:Windows Phone App crashing without exceptionsWindows Phone 应用程序崩溃无异常
【发布时间】:2014-03-25 02:57:07
【问题描述】:

我有一个 Windows Phone 8 应用程序,我已经开发了 2 年多,现在它的代码大约有 15k 行。从今天开始,它在显示主屏幕 5 秒后突然死机。我已经从第一行代码一直调试到主屏幕运行代码的位置。

我没有发现任何异常,而且从外观上我看不出有什么问题。我还能做些什么来定位它崩溃的位置/时间/原因吗?

编辑:仔细查看后,我在输出中发现了这个:

“System.Net.WebException”类型的异常发生在 System.Windows.ni.dll 中,并且在托管/本机边界之前未处理 System.Windows.ni.dll 中发生了“System.Net.WebException”类型的异常,并且在托管/本机边界之前未处理 “TaskHost.exe”(CLR C:\windows\system32\coreclr.dll:Silverlight AppDomain):已加载“C:\windows\system32\en-US\System.Xml.debug.resources.DLL”。模块是在没有符号的情况下构建的。 System.Xml.ni.dll 中发生了“System.Xml.XmlException”类型的异常,并且在托管/本机边界之前未处理 'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): 加载'C:\Data\Programs{6932AD96-A8AA-45F2-BC4E-81B7665641D8}\Install\microsoft.phone.controls。 DLL”。无法找到或打开 PDB 文件。 “TaskHost.exe”(CLR C:\windows\system32\coreclr.dll:Silverlight AppDomain):已加载“C:\windows\system32\LocationService.Interop.ni.dll”。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 System.Windows.ni.dll 中发生了“System.OutOfMemoryException”类型的异常,并且在托管/本机边界之前未处理 “TaskHost.exe”(CLR C:\windows\system32\coreclr.dll:Silverlight AppDomain):已加载“C:\windows\system32\en-US\mscorlib.debug.resources.dll”。模块是在没有符号的情况下构建的。 未知模块中出现“System.Runtime.InteropServices.SEHException”类型的异常。并且在托管/本机边界之前未处理 程序“[2540] TaskHost.exe”已退出,代码为 0 (0x0)。

但我不知道该怎么做。

【问题讨论】:

    标签: c# windows-phone-8 windows-phone


    【解决方案1】:

    您可以尝试处理Application.UnhandledException 事件。只要 Windows Phone 应用程序未处理异常,就会引发此事件。

    可能在某些非常罕见的情况下不会触发此操作,例如发生 OutOfMemoryException。

    在您的项目中,您应该有一个扩展 Application 的类。修改其构造函数以订阅此事件

    public partial class App : Application
    {
        public App()
        {
            ...
            this.UnhandledException += this.Application_UnhandledException;
            InitializeComponent();
        }
    
        private void Application_UnhandledException(object sender, 
            ApplicationUnhandledExceptionEventArgs e)
        {
            Debug.WriteLine(e.ExceptionObject);
        }
    }
    

    【讨论】:

    • 所以我只是把它放在我的代码中的某个地方?它会自己触发吗?
    • @user2408952 不完全是。我更新了我的答案,展示了如何订阅 UnhandledException 事件。
    • @user2408952 有帮助吗?
    • 不,但仔细查看输出我注意到了这一点(请参阅更新的问题)
    • @user2408952 更仔细地查看异常:您会注意到有一个OutOfMemoryException。正如我在回答中所说,没有办法捕捉到OutOfMemoryException,这是一个灾难性的失败,无论如何也没有简单的方法可以从中恢复。这意味着您要么将太多东西加载到内存中,要么由于您没有释放资源而导致内存泄漏,或者您试图一次分配大量内存。我希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多