Можно ли отключить диалоговое окно «Ошибка приложения»? - PullRequest
13 голосов
/ 09 апреля 2009

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

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

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

Ответы [ 6 ]

11 голосов
/ 09 апреля 2009
  1. Используйте «Отключить отчеты об ошибках», как предлагает мистер Джентли. См. Также эту статью о мире ПК .
  2. Если на вашем компьютере сборки установлена ​​MS Visual Studio, она обнаружит ошибки приложения и отобразит диалоговое окно. Чтобы отключить эти диалоговые окна (а также функцию отладки по времени) в Visual Studio, выполните команду drwtsn32.exe -i, чтобы установить Dr. Watson в качестве системного отладчика по умолчанию. Доктор Ватсон сгенерирует дамп ядра и тихо выйдет. (См. Эту статью базы знаний Майкрософт: http://support.microsoft.com/kb/q121434/.)
8 голосов
/ 14 апреля 2009

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

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

SetErrorMode(GetErrorMode () | SEM_NOGPFAULTERRORBOX);

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

2 голосов
/ 19 февраля 2010

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

1 голос
/ 09 апреля 2009

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

1 голос
/ 09 апреля 2009

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

  • Редактирование реестра - добавьте ваше приложение в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PCHealth \ ErrorReporting \ ExclusionList, ИЛИ
  • Щелкните правой кнопкой мыши по моему компьютеру, перейдите на вкладку «Дополнительно» и выберите «Отключить отчеты об ошибках», ИЛИ
  • Вы можете перейти к консоли служб в разделе «Администрирование», найти службу отчетов об ошибках, перейти в свойства и отключить ее
0 голосов
/ 09 апреля 2009

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

...