如何调试在 Windows Phone 8.1 上挂起的应用程序
Posted
技术标签:
【中文标题】如何调试在 Windows Phone 8.1 上挂起的应用程序【英文标题】:How to debug app hanging on Windows Phone 8.1 【发布时间】:2015-06-23 08:18:05 【问题描述】:我正在开发一个 Windows Phone 8.1 应用程序。
我的应用在启动时完全挂起,并且不会根据用户输入移动/滚动。但是,如果我强制关闭我的应用并重新打开,它似乎可以正常工作。
所以有两种结果,有时都会发生,但不一致
-
应用完全挂起并忽略所有用户输入
应用正常运行
在检查输出窗口时,我观察到当第一种情况发生时,我的输出窗口显示一系列线程退出,如下所示
The thread 0x680 has exited with code 259 (0x103).
The thread 0x780 has exited with code 259 (0x103).
The thread 0xc5c has exited with code 259 (0x103).
The thread 0x9a0 has exited with code 259 (0x103).
The thread 0xc90 has exited with code 259 (0x103).
The thread 0x4f4 has exited with code 0 (0x0).
The thread 0x2f4 has exited with code 0 (0x0).
但是,在应用程序正常运行的第二种情况下,我看不到这些线程退出。
这让我觉得这可能是因为一些线程陷入了无限循环。
除此之外,我没有看到任何可能导致此问题的异常
我确实看过this 和this 链接。但它没有说明如何解决这些类型的问题。
如何调试这些类型的问题。导致 UI 完全挂起的问题。
如果有人能指出正确的方向,我将不胜感激。
【问题讨论】:
您的应用在加载时会运行什么样的代码?它在下载什么吗? 是的,代码进行了大量的 api 调用来下载 json 有效负载,并且多个请求并行发生。 检查您是否在某项任务中调用了Wait
或Result
。
减少正在执行的代码。尝试构建最小崩溃版本,然后从那里开始调查。
【参考方案1】:
除了按照 Fred 上面的建议进行最小化重现之外,请尝试转到 Debug -> Exceptions... 菜单并启用 Thrown 以供所有人查看如果出现任何有趣的事情(注意:您经常会从 Windows 内部获得良性的第一次机会异常,因此请谨慎对待)。
当应用程序处于挂起状态时,在 VS 中点击 Pause 按钮并查看 Debug -> Windows -> Parallel Tasks 窗口,看看是否可以确定等待的内容。
最后,考虑在您的应用程序的不同点添加Debug.WriteLine
调用(在App
构造函数中,无论何时开始下载、何时完成下载等),以查看是否执行了任何代码。
【讨论】:
以上是关于如何调试在 Windows Phone 8.1 上挂起的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows Phone 8.1 / Windows 10 上创建自定义 VirtualizingPanel?
在 Windows Phone 8.1 上获取给定 CivicAddress 的坐标/地理点
如何在windows phone 8.1上设置L2TP IPSEC VPN