我有一组单线程 C++ 主程序,它们的大部分代码都是用 Ada 开发的。这是在 Atego (Rational) Apex Duo 中构建的,目标是 32 位 RHEL 6.3 Linux。exec 是我开发的一个类系统,它包括套接字、状态机和一个计时器类,它是 exec 的核心。类系统用于在通过套接字通信的 6 个不同系统上构建和执行 14 个单独的 exec。它们都使用相同的 Class 系统,并在启动时基于 INI 文件进行配置。
执行人员通过 gettimeofday 使用 linux 系统时钟以 50 或 60 Hz 的频率帧
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
和一个简单的非忙等待算法来生成所需的调度程序。
我目前面临的问题是这些高管(看似)随机失败。失败似乎是他们只是停止了取景。我已经将所有运行时 C++ 过程封装在“try{} catch(...){}”中,并且没有捕获任何内容。同样,Ada 例程受到不会被命中的异常处理程序的保护。
exec 通常会在失败前愉快地运行 30 分钟到一个多小时。没有明显的内存蠕变迹象(使用系统监视器)。我已将 Atego Rational 图形调试器附加到已经运行的执行程序上,但无济于事。当一个最终失败时,调用堆栈中没有任何内容,调试器日志中的唯一指示是应用程序“退出,状态为 255”。
恐怕系统中某处的(Linux)系统例程或驱动程序正在调用 Exit。似乎有些东西正在调用退出!
任何人都知道如何进一步解决这个问题?