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

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

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

Можно ли автоматически генерировать мини-дамп вместо отображения диалога?

6 ответов

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

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

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

SetErrorMode(GetErrorMode () | SEM_NOGPFAULTERRORBOX);

Выше "ИЛИ" текущий режим с нашим желаемым дополнением.

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

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

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

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

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

Другие вопросы по тегам