外出先アプリケーションの開発中に、特別なことがありましたが、本当に厄介なバグがありました。この症状は、プロセスが消えるという単純なものです。ログは突然終了するだけで、クラッシュダンプなど何も見つかりません。ゾンビプロセスは存在しません。ワトソン博士は何の痕跡も残さずに私たちを離れることに気づいていません。トレースレスクラッシュをデバッグする方法
エラーは再生するのが簡単ではなく、このエラーを再現するのに平均して3〜4時間かかります。同じ操作を繰り返し実行します。だからどこかには何らかの競合状態があります。 SEHと通常の例外の両方を扱う特別な関数があるので、これらのどれも気付かれないようにしてください。
特殊なハードウェア上で実行されているため、デバッグは特別なコンピュータで行う必要があります。したがって、リモートデバッグだけが利用可能です。また、リモートデバッグが接続されている場合、C++ビルダーは、アプリケーションが存在しないことに気付かず、存在しないプロセスでデバッグしようとするとクラッシュして焼き付きます。
私たちは、このソフトウェアとテクノロジーの多種多様な使用している:
- OpenGLを
- のDirectShow +いくつかのCOTSフィルタ
- COM/DCOM、専用のハードウェアに話し
- シリアルCOMポート
- C++ Builder(VC++とは異なるスタックフレームを使用する)
あなたが理解しているように、私はここで多くのことをする必要はありません。私が今やっているのは、エラーが発生したコードに特定の点があるかどうかを見つけるために、コード内の別の場所にログインして絞り込むことです。私は、できるだけ単純なケースを得るために、私が実行しているアクションの多くの側面を削除しようとしています。しかし、これは実際には複雑な操作であり、このプロセスには多くの時間がかかり、時間は(通常通り)希少なリソースになります。
誰かが私のために良いヒントを持っているのだろうか(一般的にはプロセスが何の通知もせずに停止する原因)か、そのような致命的なエラーをデバッグするテクニックには疑問がありますか?
私はこのバグのクラスに「バミューダ・トライアングル・バグ」という名前を付けます。 – caf
これを実行しているWindowsの正確なバージョンは何ですか? – Argote
これはカスタマイズされた組み込みXPで実行されています。 – daramarak