我们有一个非托管 C++ 应用程序(MFC 框架,Windows CE),它在看似随机的时刻关闭我们。
没有错误消息,也没有 C++ 异常,它就消失了。
我认为一定发生了一些不好的事情,并且 C 运行时或操作系统决定终止该程序。但我不确定在哪里继续搜索。
问题:是否有可能在 Windows CE 的某个地方看到为什么应用程序首先终止?
Windows CE 是否收集基本的崩溃信息?也许至少可以看到它是访问冲突、内存不足情况、内核/驱动程序恐慌还是其他类型的内部或外部事件迫使应用程序关闭?
在一台普通的 x86 PC 上,调试器、应用程序验证器、Windows 错误报告工具、WinDbg 等会崩溃。但是如何(开始)分析 Windows CE 应用程序崩溃?
到目前为止我已经尝试过:
- 在应用程序的战术位置创建全局 C++ 异常处理程序。这些构建和传输包含最少异常信息的简单 UDP 数据包。然后在另一台运行 Wireshark 的机器上查看这些内容。
- 添加 SEH 异常编译器开关 (
/EHa
),以便能够捕获甚至那些非 C++ 异常,例如访问冲突等。 - 通过 TCP/IP 将 Visual Studio 2008 调试器与智能设备连接(MSVS 表示成功连接到智能设备,但调试器没有看到任何远程进程
Attach to process
。VS 窗口给出以下错误:Unable to Connect to ''
.) - 重新定位应用程序,使其在常规 x86 PC 上运行(但随后运行良好,因此也没有“奢侈”的调试问题)
我通过强制访问冲突测试了异常处理程序。预期的 UDP 消息完美地到达运行 Wireshark 的机器。但是当真正的问题发生时,它完全保持沉默。
平台:在德州仪器处理器 (ARM A8) 上运行的 MS Windows Embedded Compact 7.02。
应用程序本身实现了一个基本的 VNC 查看器。它使用套接字并依赖名为 zlib CE ( ) 的第三方二进制文件ZLIBCE.DLL
来解压缩 VNC 数据。
尚未验证 zlib 二进制文件是否已针对完全相同的编译器(和/或编译器设置)构建。