Подтвердить что ты не робот

Можно ли отключить диалоговое окно "Ошибка приложения"?

Я использую Hudson как сервер непрерывной интеграции для тестирования кода C/С++. К сожалению, у меня есть ошибка где-то, что приводит к повреждению памяти, поэтому на некоторых машинах Windows я иногда получаю диалоговое окно "Ошибка приложения", объясняющее, что инструкция ссылается на память, которую невозможно прочитать. Это диалоговое окно появляется и в основном висит в тестовом прогоне, так как требует ручного вмешательства.

Есть ли способ предотвратить появление этого диалогового окна, чтобы тестовый прогон просто завершился неудачей и сообщается как таковой в Hudson?

Возможно ли автоматическое создание minidump вместо отображения диалога?

4b9b3361

Ответ 1

  • Используйте "Отключить отчет об ошибках", как предлагает г-н Гэнти. См. Также в этой статье PC World.
  • Если у вас есть MS Visual Studio на вашей машине сборки, она уловит ошибки приложений и откроет диалоговое окно. Чтобы отключить эти диалоги (а также функцию отладки "Just-In-Time Debugging" в Visual Studio), запустите команду drwtsn32.exe -i, чтобы установить Dr. Watson как системный отладчик по умолчанию. Д-р Уотсон будет генерировать основной дамп и молча выйти. (См. Эту статью Microsoft Knowledge Base: http://support.microsoft.com/kb/q121434/.)

Ответ 2

Вы также можете сделать что-то вроде этого программно, используя SetErrorMode. Подробнее см. эту статью.

Простым примером того, как его использовать, является следующее:

SetErrorMode(GetErrorMode () | SEM_NOGPFAULTERRORBOX);

Вышеуказанные "ORs" - текущий режим с нашим желаемым добавлением.

Ответ 3

В дополнение к тому, что сказал rkb, если вы используете Windows XP 64bit, есть два набора значений. Те, которые находятся в обычном расположении реестра, и те, что находятся под клавишей Wow6432Node в HKLM. Чтобы обновить оба, запустите drwtsn32.exe -i как из %SYSTEMROOT%\system32, так и %SYSTEMROOT%\SysWOW64.

Ответ 4

Отключить отчет об ошибках через:

  • Редактирование реестра - добавьте ваше приложение в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PCHealth\ErrorReporting\ExclusionList, OR
  • Щелкните правой кнопкой мыши на "Мой компьютер", перейдите на вкладку "Дополнительно" и выберите параметр "Отключить отчет об ошибках", OR
  • Вы можете перейти к консоли служб в разделе "Администрирование", найти службу отчетов об ошибках, перейти в свойства и отключить ее.

Ответ 5

Вы можете использовать различные функции _CrtSetReport для управления тем, как среда выполнения C/С++ реагирует на различные ошибки (_CrtSetReportHook, _CrtSetReportMode, _CrtSetReportFile, _CrtSetReportHook2)

Ответ 6

Используйте оператор try/catch, чтобы поймать исключение и обработать его так, как вы хотите.