c# – Compact Framework 3.5应用程序在CE7 / Motorola MC32N0上间歇性崩溃
作者:互联网
我们有一个使用Compact Framework 3.5的C#应用程序,运行在运行Windows CE 5.0和Windows Mobile的“移动计算机”上.
该应用程序适用于这些设备,包括运行Windows CE 5.0的Motorola / Symbol MC3190.
现在,这款MC3190已经淘汰,并被摩托罗拉/ Symbol MC3200(也是MC32N0)取代.此设备运行Windows CE 7.0并预安装了Compact Framework 3.5.
我们的应用程序间歇地和神秘地崩溃在这个设备上.
通过在我们的应用程序中打开和关闭大量表单,我可以在一定程度上重现问题.这些操作不会导致任何网络流量.有时我会在30秒内发生崩溃,有时需要10分钟的随机动作.
在某些时候,应用程序将完全冻结.按Windows CE开始按钮将在冻结的应用程序上绘制开始菜单,但再次按下它将不会隐藏开始菜单.
看起来工具箱中存在某种无限循环,但我无法找出它是什么.这是我尝试的一系列事项:
>我对源代码库进行了很多更改(主要是对表单的显示和处理方式的更改)
>我试图在连接到VS调试器时崩溃应用程序,然后“全部中断”,但这只会停止,直到我硬重启设备.
>我尝试使用.NET Compact Framework远程性能监视器,它向我显示有关垃圾收集等的有趣数字,但没有内存泄漏,也没有任何信息可以帮助我查明冻结情况.
>我尝试过使用“CLR Profiler”,但是我的设备上出现错误信息“连接时出现未知错误:RemoteInstall:不支持的指令集”.
>我尝试联系摩托罗拉支持,甚至向他们发送了我的源代码,但他们只是要求知道“哪个API导致崩溃”(我希望他们可以告诉我)
问题:
>有没有人在MC32N0上运行的CF应用程序上看到过这样的崩溃?
>有没有人在MC32N0上使用CLR Profiler?
>有没有人知道如何在冻结的CF应用程序上获得某种线程转储? (有点像JVM的jstack)
>有没有人知道如何调试这个?
任何帮助深表感谢!
更新
该设备已经使用视觉崩溃工件撞击了我几次,如下所示:
http://i.stack.imgur.com/HAxt8.jpg
崩溃症状通常如下所示:
>愉快地使用应用程序,在世界范围内无需谨慎地选择订单
>突然,应用程序不再处理键盘输入
>有趣的是,此时我经常能够聚焦不同的TextBox,光标会在那里闪烁一会儿
>经过多次交互后,系统完全锁定,Windows启动按钮也变得无响应
>几次 – 我见过的大约100起崩溃中的3次 – 该设备将产生一个崩溃模式,如上图所示
注意:我们的供应商提供了两台产生崩溃的MC3200设备,因此我发现很难相信这是一个硬件问题.
有没有人认识到这些“症状”?有什么想法吗?
解决方法:
我们在MC32N0上的应用程序遇到了同样的“锁定”问题.
Zebra确实拥有可以让您更好地了解正在发生的事情的工具. eMscript是一种可以在后台运行并进行一些流程和资源监控的工具. RTLog(在设备上)可以为您提供一些信息,但仅对未捕获的异常等严重故障有用.在我们的设备上,我们可以使用FUNC-F9启动RTLog转储,如果成功,设备将发出蜂鸣声,并且转储文件将位于设备的根目录中.
好吧,经过几个小时的调试/测试/重写代码后,我们最终在一篇不起眼的帖子中发现了锁定问题是由垃圾收集引起的.我们似乎锁定了表单转换,因此我们在导航之前所做的就是在基本表单的Uninitialize()方法中添加两行代码.
GC.Collect();
GC.WaitForPendingFinalizers();
幸运的是,我们所有的表单都是从基本表单派生的,所以我们只需要将它包含在一个位置.
我再也找不到帖子了,或者我会在这里引用它.这是一篇微软帖子,在终结器运行时将问题描述为随机锁定,但他们也表示已经纠正.
从那以后,我们一直在运行,没有锁定问题.
希望这有助于某人……
标签:c,net,compact-framework,windows-ce 来源: https://codeday.me/bug/20190609/1202039.html