13

Visual Studio 2010 で C++ を使用したソフトウェアの開発に取り組んでいます。このソフトウェアは人間の操作が利用できないサーバー上で実行する必要があるため、この「program.exe が動作を停止しました」というウィンドウを取り除く必要があります。エラーが発生した場合、リリース バージョンでポップアップします。プログラムを終了させたいだけで(エラーメッセージも表示される可能性がありますが、必ずしもそうではありません)、誰かが「プログラムを閉じる」ボタンをクリックするのを待ってブロックしたままにしないでください。私のマシンには64ビットのWindows 7 Professionalがあることに言及する必要があります。

次のようないくつかのことについて読みました。

  • _set_abort_behavior 関数。これにより、abort() が呼び出された場合は解決されますが、「ベクトル添え字が範囲外」などのエラーの場合はそうではありません。

  • 例外処理を行うことでこれらのエラーの一部を解決できることはわかっていますが、すべてのエラーが例外であるとは限らないため、これで問題全体が解決されるわけではありません。

  • また、アプリケーションをサイレントに終了するワトソン博士のデバッガーについても読んだことがありますが、このデバッガーは Windows 7 では使用できないという印象を受けました。さらに、このデバッガーが問題を解決するかどうかもわかりません。リリースモードで…

  • マシン全体でエラー報告を無効にすることはエレガントなオプションだとは思いませんが、これも代替手段になる可能性があることを読みました (実際に取りたいものではありません)。

Visual Studio でこれを行うにはどうすればよいですか? 使用できる設定はありますか?

例外処理メカニズムで問題を解決できるように、Visual Studio ですべてのエラーを例外に変換する方法はありますか? (これがばかげた質問だった場合は寛大にしてください)

あなたの提案を楽しみにしています。お時間をいただきありがとうございました!

敬具、 コーネリア

4

3 に答える 3

19

使用できます

SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);

SetErrorMode の MSDN ドキュメント

ここでも参照できます

これで問題が解決することを願っています...

于 2012-07-19T11:10:20.100 に答える
1

適切な方法は、独自の未処理の例外フィルターを追加し ( SetUnhandledExceptionFilter()のドキュメントを参照)、ログとミニ ダンプを作成して、必要なエラー処理 (デバイス/ハンドルのクローズなど) を実行できるようにすることです。後で分析できるクラッシュ ダンプ。この回答の有用な情報: https://stackoverflow.com/a/1547251/188414

于 2012-07-19T11:41:15.443 に答える