Windows Phone 8.1应用在非调试异步等待时崩溃

10

我正在开发一个 Windows Phone 8.1 应用程序,进入了一个月左右,到目前为止,我写的部分代码几乎没有问题。

我决定在不通过 VS 2013 调试器运行应用程序的情况下进行一些测试。但是,出于某种原因,在第一个界面加载之前,应用程序就会崩溃。我没有收到任何异常或消息(我正在使用 Raygun 进行错误记录)。

我全程使用异步方法(有些是异步 void,有些是异步 Task),但在调试时所有这些方法都能正常工作。

最主要的帮助是得到一些错误信息。我已经被迫注释掉代码段,但最终我无法得到什么结果,因为似乎当我认为已经找到问题时,代码又在更深的位置崩溃了。

曾经有一次,我发现调用 ListView.UpdateLayout() 有问题。我将其注释掉,然后应用程序可以正常运行,没有出现崩溃。但是随后我取消了其他一些代码的注释,现在它又崩溃了。

如果有人知道如何从手机获取异常,或者遇到过这个问题,请给予帮助,我将不胜感激。我可以提供任何需要的其他信息。

更新:我认为我已经将问题缩小到 Sqlite.NET 上了。我正在使用 Sqlite.Net for WinRT 以及一个名为 SqliteNetExtensions 的扩展。具体语句如下:

    DataContext.Context.Connection.Table<Message>().Where(m => m.ChannelID == channelID && m.ChannelID.Contains("C")).ToList();
如果我注释掉这个代码块,应用就没有问题。这个LINQ语句最多只返回100条记录。我不认为100条记录的选择语句会导致应用崩溃,但似乎是罪魁祸首。有什么优化Sqlite.NET的想法吗?
更新2: 终于找到问题所在了!它与SQLite无关,也与我的代码无关,而是我的手机问题。我使用的是诺基亚Lumia Icon。几周前,我曾安装过Rudy Huyn的Lockscreen Beta。卸载时它引起了一些问题,但与我的应用程序无关。今天,我让我的合作伙伴在他的手机上安装我的应用程序,他有同样型号的手机。该应用程序运行速度提高了约50倍且未崩溃。我恢复出厂设置后,应用程序完美地运行了。所以,专业提示:不要安装Rudy Huyn的Lockscreen Beta!!!

@the_nuts 我已经尝试过了,但没有成功。 就好像发生的任何异常都没有浮出水面一样。 我从未遇到过这样的问题,在调试模式下应用程序可以正常工作,但在手机上运行时会崩溃,并且没有抛出任何异常。 - John Murphy
你尝试过在App.cs文件的未处理异常事件中获取异常吗?只需将其抛出到消息框或用它来组合一封电子邮件。 - Paulo Morgado
@PauloMorgado 我已经设置好了Raygun,并且应该在App.xaml.cs中的UnhandledException触发时发送异常。我还没有尝试使用消息框。我可以尝试一下,但是我认为如果Raygun没有捕获到它,那么消息框也不会。 - John Murphy
除非 Raygun 正在依赖于引起问题的原因或者自身引起问题。 - Paulo Morgado
@PauloMorgado 可能是可以的,不过我已经在另一个应用程序中使用了 Raygun 一段时间了。另一方面,在这个阶段我不会排除任何可能性。 - John Murphy
显示剩余3条评论
1个回答

1
作为旁注,我建议你花点时间确保尽量避免使用async void。有充分的文献证明async void通常会导致问题。 这里有一篇很好的文章介绍了它的缺点here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接