2009-04-09 16 views
13

私はC/C++コードをテストするためにHudsonを継続的な統合サーバーとして使用しています。残念ながら、どこかでメモリ破損の原因となるバグがあります。そのため、一部のWindowsマシンでは、読み込めなかったメモリを参照している命令を示す「アプリケーションエラー」ダイアログボックスが表示されることがあります。このダイアログボックスが表示され、手動による介入が必要になるため、基本的にテスト実行がハングアップします。[アプリケーションエラー]ダイアログボックスを無効にすることはできますか?

このダイアログボックスが表示されないようにする方法があるため、テストの実行に失敗し、ハドソンでそのように報告されますか?

ダイアログを表示する代わりに自動的にミニダンプを生成することはできますか?

+0

類似:https://stackoverflow.com/questions/2284138/disable-debug-prompt-on-application-crashおよびhttps://stackoverflow.com/questions/3561545/how-to-terminate-a-program -when-it-crashes-just-fail-a-unit-test – Vadzim

答えて

11
  1. 使用するように応答する方法を制御するために、様々な_CrtSetReport機能を使用することができます。 this PC World articleも参照してください。
  2. ビルドマシンでMS Visual Studioを使用すると、アプリケーションエラーが発生し、ダイアログボックスが表示されます。これらのダイアログ(およびVisual Studioのジャストインタイムデバッグ機能)を無効にするには、コマンドdrwtsn32.exe -iを実行して、Dr. Watsonをデフォルトのシステムデバッガとして設定します。ワトソン博士はコアダンプを生成し、静かに終了します。 (このマイクロソフトサポート技術情報の記事を参照してください。http://support.microsoft.com/kb/q121434/)またprogramaticaly SetErrorModeを使用して、このような何かを行うことができ
+1

ありがとう!ワトソン博士の設定を元に戻し、プロンプトを表示しないように設定することは、私が探していたものでした! – mch

+1

PC Worldの記事が空であるようです。したがって、最初の選択肢は有用な答えを提供しません。 – skyking

-2

try/catchステートメントを使用して例外をキャッチし、必要に応じて処理します。

+1

私が知る限り、try/catchは無効なメモリアクセスをキャッチできません。 – mch

+1

ただし、__try/__exceptは可能です。 – ChrisV

1

無効にエラー報告を経由:

  • レジストリの編集 - マイクロソフト\ PCHealth \ ErrorReporting \ ExclusionListのHKEY_LOCAL_MACHINE \ SOFTWARE \にアプリケーションを追加し、OR
  • は、高度に行き、マイコンピュータを右クリックしてくださいタブは、およびオプション「の報告を無効にするエラー」を選択し、OR
  • あなたは、サービスのエラー報告を見つけ、管理ツールで、サービスコンソールに移動プロパティにアクセスし、無効にすることができ、それ
1

あなたは、C/C++ランタイム氏は静かに示唆するように、「報告を無効にするエラー」様々なエラー(_CrtSetReportHook、_CrtSetReportMode、_CrtSetReportFile、_CrtSetReportHook2)

7

。詳細については、thisの記事を参照してください。

SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX); 

上記の「論理和」私たちの希望を加えて現在のモード:

それを使用する方法の簡単な例は、次の操作を行うことです。

+1

同様に、 "_set_abort_behavior(0、_WRITE_ABORT_MSG);"を呼び出すことが重要だと思います。誰かが "abort()"(DebugビルドIIRCのキャッチされていないC++例外のデフォルトの動作) 。 – pauldoo

2

Windows XP 64ビットを実行している場合、rkbに加えて、2つの値があります。通常のレジストリの場所にあるものとWow6432NodeのキーのものはHKLMです。両方を更新するには、%SYSTEMROOT%\system32%SYSTEMROOT%\SysWOW64の両方からdrwtsn32.exe -iを実行してください。