Список вещей, чтобы проверить, чтобы приложения VC ++ не показывали фатальные сообщения об ошибках - PullRequest
6 голосов
/ 25 декабря 2009

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 25 декабря 2009

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

Кстати, я думаю SetUnhandledExceptionFilter . является релевантным API.

2 голосов
/ 25 декабря 2009
2 голосов
/ 25 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...