代码之家  ›  专栏  ›  技术社区  ›  E. van Putten

Windows嵌入式Compact(windowsce)程序的事后分析

  •  -1
  • E. van Putten  · 技术社区  · 6 年前

    我们有一个非托管C++应用程序(MFC框架,Windows CE),它关闭我们在看似随机的时刻。

    我推测一定发生了什么不好的事情,C运行时或操作系统决定终止程序。但我不知道在哪里继续搜索。

    问:是否可以在windowsce中看到某个地方 申请一开始就终止了?

    在普通的x86个人电脑上,会出现调试器、应用程序验证程序、Windows错误报告工具、WinDbg等,但是如何(开始)分析windowsce应用程序崩溃呢?

    到目前为止我试过的:

    • 在应用程序中的战术位置创建全局C++异常处理程序。它们构建并传输一个简单的UDP包,其中包含最少的异常信息。然后在另一台运行Wireshark的机器上查看这些内容。
    • 添加SEH exception编译器开关( /EHa ,甚至能够捕获那些非C++异常,比如访问冲突等。
    • MSVS说,通过TCP/IP连接visualstudio2008调试器与智能设备(成功连接到智能设备),但是调试器没有看到任何远程进程。这个 Attach to process VS窗口出现以下错误: Unable to Connect to '' .)
    • 重新确定应用程序的目标,使其在普通x86 PC上运行(但运行正常,因此也没有“奢侈”的调试问题)

    我已经通过强制访问冲突测试了异常处理程序。 预期的UDP消息到达运行Wireshark的计算机。但当真正的问题发生时,它完全保持沉默。

    平台:MS Windows Embedded Compact 7.02,运行在德州仪器处理器(ARM A8)上。

    应用程序本身实现了一个基本的VNC查看器。它使用套接字并依赖于第三方二进制文件zlib CE( ZLIBCE.DLL )用于解压缩VNC数据。

    还没有验证zlib二进制文件是否是根据完全相同的编译器(和/或编译器设置)构建的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   E. van Putten    6 年前

    就为了一个穷人的解决方案。现在将应用程序状态值发送到内存映射文件。其思想是一个精心编制的助手程序沿着主应用程序运行。这个程序打开内存映射文件,显示从中读取的值。主程序会写入它。如果主应用程序发生任何致命的事件,helper程序将拥有最新的状态信息。因为它是共享内存,所以对性能影响不大。这样可以找到程序中发生故障的部分。