0

クローズド ソースのプロプライエタリ プログラムによってロードされる DLL を作成していますが、これを制御することはできません。また、同じようにわかりにくい独自の DLL もロードします。コマンドをリレーする必要がある場合があるため、DLL インターフェイスを介して DLL に到達し、非常に短いレイテンシーでロードします。DLL の初期化時に別の切り離されたスレッドを起動し、ロックフリー キューを介してフォーマットされていないデバッグ情報を送信します。したがって、時間のかかるデバッグ出力のフォーマットとログ ファイルへの書き込みは、非同期で行われます。問題は、プロセスが不注意にクラッシュすることです (これは私のせいではないとほぼ確信しています)。デタッチされたスレッドがディスクに書き込む前に Windows によって強制終了されるため、最後のデバッグ情報が何であったかを知る方法がありません。

だからここに私の質問があります:

  • プロプライエタリなプログラムがクラッシュした場合、破棄を遅らせることはできますか?
  • プロセス間通信は、切り離されたスレッドをウィンドウが強制終了しない別のプロセスに移動することで問題を解決しますか? もしそうなら、どのような方法を提案しますか(私はIPCをあまり扱っていません)
  • IPC を使用している場合、「デバッグ フォーマット プロセス」を終了するタイミングをどのように知ることができますか?
4

1 に答える 1

2

IPC を使用しても、プロセスの障害時にスレッドに書き込まれていないデバッグ情報が含まれている可能性があると思います。おそらく、常にデバッグを行っているわけではないので、それを有効にするためのコンパイル時または実行時のオプションだけで、別のスレッドは必要ないと思います。プロセスを終了する前に、いくつかのことを実行できるSetUnhandledExceptionFilter場合があります。

于 2013-02-06T17:07:31.943 に答える