Список вещей проверить для предотвращения VC ++ приложения от показа полей сообщения о фатальной ошибке

Время от времени существует сильная необходимость записать программу таким способом, которым она никогда (действительно никогда) не показывает сообщение об ошибке окном сообщения. Например, это может быть прогон программы в ежедневной сборке - если это зависает с окном сообщения, ежедневная сборка зависает.

К сожалению, VC ++ время выполнения имеет много способов инициировать окна сообщения при указании на ошибки.

В первую очередь, каждый раз, когда исключение не обработано terminate() назван, который звонит abort() то, которое вызывает "Это приложение, запросило Время выполнения завершить его необычным способом". окно сообщения. Это может работаться вокруг путем ловли всех исключений и/или использования set_terminate() установить пользовательское terminate() обработчик без окон сообщения.

Затем каждый раз, когда исключение выходит из любого destrutor во время раскручивания стека terminate() также назван. set_terminate() помогает здесь также.

Затем существует "чистое окно сообщения" вызова виртуальной функции, которое показывают в некоторых жестких случаях несоответствия количеству функций, ожидаемых вызывающей стороной и реализованными вызываемым. _set_purecall_handler() должен помочь здесь.

Что еще сделать к VC ++ программа, чтобы быть абсолютно положительно уверенным, что она не показывает окно сообщения в некоторой фатальной ситуации?

6
задан sharptooth 25 December 2009 в 14:34
поделиться

3 ответа

Я бы порекомендовал вам использовать вспомогательную программу для ее запуска, и чтобы этот помощник ограничивал время выполнения вашей программы. Это, безусловно, самый безопасный способ, если вы можете это сделать, поскольку он обрабатывает все случаи. Некоторые вещи, которые вы не можете обработать в своей программе напрямую, например, «Эта программа не является допустимым приложением Win32», что может произойти, если вам не хватает DLL.

2
ответ дан 17 December 2019 в 02:29
поделиться
2
ответ дан 17 December 2019 в 02:29
поделиться

Подключите API MessageBox перед ежедневной сборкой.

Кстати, я думаю SetUnhandledExceptionFilter . соответствующий API.

2
ответ дан 17 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: