Ada で開発されたコードの大部分を含むシングル スレッドの C++ メインのセットがあります。これは Atego (Rational) Apex Duo で構築されており、32 ビット RHEL 6.3 Linux を対象としています。exec は、ソケット、ステート マシン、および exec の心臓部であるタイマー クラスを含む、私が開発したクラス システムです。クラス システムは、ソケットを介して通信する 6 つの異なるシステムで 14 の個別の exec を構築および実行するために使用されます。それらはすべて同じクラス システムを使用し、起動時に INI ファイルに基づいて構成されます。
exec は、gettimeofday を介して Linux システム クロックを使用して 50 または 60 Hz でフレーム化します。
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
目的のスケジューラを生成するためのシンプルな非ビジーウェイト アルゴリズム。
私が現在直面している問題は、これらの exec が (一見) ランダムに失敗することです。失敗は、単にフレーミングを停止したことのようです。すべてのランタイム C++ プロシージャを「try{} catch(...){}」にカプセル化しましたが、何もキャッチされません。同様に、Ada ルーチンは、ヒットしない例外ハンドラーで保護されています。
exec は、多くの場合、失敗するまで 30 分から 1 時間以上問題なく実行されます。メモリ クリープの兆候は明らかではありません (システム モニタを使用)。Atego Rational Graphical Debugger を既に実行中の exec に接続しましたが、役に立ちませんでした。最終的に失敗した場合、コール スタックには何もなく、デバッガ ログの唯一の表示は、アプリケーションが「ステータス 255 で終了しました」ということです。
残念ながら、システムのどこかにある (Linux) システム ルーチンまたはドライバーが Exit を呼び出しています。何かが exit を呼び出しているようです!
この問題をさらに掘り下げる方法を知っている人はいますか?