Можно ли отключить диалоговое окно "Ошибка приложения"?
Я использую Hudson в качестве сервера непрерывной интеграции для тестирования кода C/C++. К сожалению, у меня где-то есть ошибка, которая приводит к повреждению памяти, поэтому на некоторых компьютерах с Windows иногда появляется диалоговое окно "Ошибка приложения", объясняющее, что инструкция ссылается на память, которая не может быть прочитана. Это диалоговое окно всплывает и в основном останавливает тестовый прогон, так как требует ручного вмешательства.
Есть ли способ предотвратить появление этого диалогового окна, чтобы тестовый запуск просто не удался и в Гудзоне это было сообщено как таковое?
Можно ли автоматически генерировать мини-дамп вместо отображения диалога?
6 ответов
- Используйте "Отключить отчеты об ошибках", как предлагает мистер Джентли. Смотрите также эту статью PC World.
- Если у вас на компьютере сборки 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, чтобы перехватить исключение и обработать его так, как вы хотите.