我们在 Windows CE 和 Windows Mobile 上运行一个相当复杂的软件,用于在不同设备类型上进行移动数据采集。在唯一安装了 Windows CE 6.0 的设备类型上,我们的客户端随机冻结操作系统(因此需要热启动)。客户端可能会在冻结之前运行良好的一两天,但也可能是五分钟(已经检查了句柄和内存泄漏)。在设备制造商的日志文件中,设备冻结时会出现此类条目:
异常“数据中止”(4):线程 ID = 070a003e(pth = 89ca07e0),过程 ID = 0709003e(pprc = 8a01d3d0)'OurClient.exe',VM-active = 0709003e(pprc = 8a01d3d0)'OurClient.exe ' PC=41a66b28(mscoree3_5.dll+0x00056b28) RA=41a64ab4(mscoree3_5.dll+0x00054ab4) SP=0003e28c, BVA=00000132
这些消息有时会有所不同(我想说到目前为止我统计了 20 条不同的消息,但 kernel.dll、k.core.dll 或 nk.exe 中的消息除外)。
所以我的问题基本上是,如何调试在.NET框架和内核深处发生的这种错误?例如,如何将程序计数器转换为 mscorlib 中的方法(返回地址相同)?我们的程序是否可能不适用于 CE 6,或者这也可能是驱动程序问题?
更新:事实证明,其中一个设备驱动程序干扰了我们的键盘挂钩实现。