【问题标题】:Windows Phone 8.1 App Crashes When Not Debugging Async AwaitWindows Phone 8.1 应用程序在不调试异步等待时崩溃
【发布时间】:2014-09-05 20:26:07
【问题描述】:

我正在开发一个 Windows Phone 8.1 应用程序。我进入该项目大约一个月,到目前为止我所写的内容几乎没有发现任何问题。

我决定在不通过 VS 2013 调试器运行的情况下对应用程序进行一些测试。现在,由于某种原因,应用程序在进入第一个屏幕之前就崩溃了。我没有收到任何异常或消息(我使用 Raygun 进行错误记录)。

我一直在使用异步方法(一些异步无效,其他异步任务),但所有这些在调试时都有效。

主要的帮助是获得某种错误信息。我已经减少到注释掉代码部分,但最终这让我无处可去,因为似乎当我认为我找到了问题时,我在代码中又遇到了另一个崩溃。

有一次,我发现调用:ListView.UpdateLayout() 存在问题。我对此进行了评论,该应用程序将正常运行而不会崩溃。然后我取消了一些代码的注释,现在它又崩溃了。

如果有人知道从电话中获取异常的方法,或者如果有人以前遇到过这个问题,我们将不胜感激。我可以提供任何需要的进一步信息。

更新: 我想我已将问题缩小到 Sqlite.NET。我正在使用用于 WinRT 的 Sqlite.Net 以及名为 SqliteNetExtensions 的扩展。具体的说法是

    DataContext.Context.Connection.Table<Message>().Where(m => m.ChannelID == channelID && m.ChannelID.Contains("C")).ToList();

如果我将其注释掉,应用程序将毫无问题地运行。此 LINQ 语句最多返回 100 条记录。我认为 100 条记录的 SELECT 语句不会导致应用程序崩溃,但它似乎是罪魁祸首。关于如何优化 Sqlite.NET 的任何想法?

更新 2: 终于想通了!它根本不是 SQLite。这根本不是我的代码。那是我的电话。我正在运行诺基亚 Lumia Icon。几周前我安装了 Rudy Huyn 的 Lockscreen Beta。当我卸载它时它引起了一些问题,但它与我的应用程序无关。今天,我让我的商业伙伴在他的手机上安装了我的应用程序,他有相同型号的手机。该应用程序的速度提高了大约 50 倍,并且没有崩溃。我从工厂恢复了我的手机,你瞧,它运行良好。所以,专业提示:不要安装 RUDY HUYN 的 LOCKSCREEN Beta 版!!!

【问题讨论】:

  • 您可以在事件查看器中尝试Applications & Services-Microsoft-Windows-下的日志Appx*.
  • @JeroenVannevel 谢谢,但这并没有给我太多。我真正需要的是一种查看电话本身的错误/事件日志的方法。有什么方法可以获取这些信息?
  • 把方法的全部内容放在try-catch中,然后在messagedialog中捕获异常?
  • @the_nuts 我试过了,但没有骰子。就像发生的任何异常都不会冒泡。我从来没有遇到过应用程序在调试模式下运行没有问题但在手机上运行时崩溃并且没有引发异常的问题。
  • 您是否尝试过获取 App.cs 文件中未处理异常事件的异常?只需将其放入消息框或用它撰写电子邮件即可。

标签: c# windows windows-runtime async-await windows-phone-8.1


【解决方案1】:

顺便说一句,我会花时间确保您始终避免使用 async void。有据可查的是,async void 通常是麻烦的根源。

有一篇很好的文章介绍了here所显示的缺点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多