1

現在、クラッシュハンドラーをデバッグしようとしています。これは、プログラムが未処理の構造化例外を検出したときに呼び出される外部実行可能ファイルです。クラッシュハンドラ実行可能ファイルを再コンパイルしました。テストすると、「プログラムが大きすぎてメモリに収まりません」というメッセージが表示されました。

少し調べてみると、これは未処理の例外フィルター内のCreateProcess呼び出しが原因であることがわかりました。このエラーメッセージは実行可能ファイルが破損していることを示しているというこの投稿を見つけましたが、コマンドラインからCrashHandler.exeを呼び出しても、そのようなエラーは発生しません。

その他の情報:

  • デバッグモードとリリースモードの両方で、アプリケーションとクラッシュハンドラーを複数回再構築しようとしました。
  • 実行中のスレッドに2桁多くのスタックスペースを与えてみました。
  • 同じCrashHandler.exeを、すでに使用している別のアプリケーションでテストしましたが、問題はありませんでした。
  • 以前に機能していた以前のバージョンのexeを使用してみましたが、同じ結果になりました。
  • システムを再起動します。

CreateProcessへの私の呼び出し:

//Fire off the Handler
//HandlerArgs = "CrashHandler.exe arg1 arg2 arg3 etc..."
if(CreateProcess(NULL, HandlerArgs, NULL, NULL, TRUE, CREATE_PRESERVE_CODE_AUTHZ_LEVEL | CREATE_SUSPENDED,
                 NULL, NULL, &StartupInfo, &NewProcessHandle))
4

1 に答える 1

2

ビルド後のフックの1つが、ソース管理リポジトリからexeをコピーしていたことがわかりました。ソース管理リポジトリにあるファイルは、実際にはpdbでした。テスト中、実行中のフォルダに直接コピーしていたところ、フックが「破損した」exeを再度コピーしていました。

于 2011-03-23T05:14:43.923 に答える