【问题标题】:Post-mortem analysis of Windows Embedded Compact (Windows CE) programWindows Embedded Compact (Windows CE) 程序的事后分析
【发布时间】:2018-10-01 11:46:45
【问题描述】:

我们有一个非托管 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 二进制文件是否针对完全相同的编译器(和/或编译器设置)构建。

【问题讨论】:

    标签: c++ crash windows-ce unmanaged postmortem-debugging


    【解决方案1】:

    满足于穷人的调试解决方案。现在将应用程序状态值发送到内存映射文件。这个想法是一个特制的帮助程序沿着主应用程序运行。该程序打开内存映射文件,显示它从中读取的值。主程序写入它。如果主应用程序发生任何致命的事情,帮助程序具有最新的状态信息。由于它是共享内存,因此不会对性能产生太大影响。这样就找到了程序出错的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多