Время от времени возникает острая необходимость написать программу таким образом, чтобы она никогда (действительно никогда) не отображала сообщение об ошибке в виде окна сообщения. Например, это может быть программа, запускаемая внутри ежедневной сборки - если она зависает с окном сообщения, ежедневная сборка зависает.
К сожалению, во время выполнения VC ++ есть много способов вызвать окна сообщений при указании ошибок.
Прежде всего, когда исключение не обрабатывается, вызывается terminate()
, который вызывает abort()
, что вызывает «Это приложение запросило среду выполнения прекратить его необычным способом». окно сообщения. Эту проблему можно обойти, перехватив все исключения и / или используя set_terminate()
для установки пользовательского обработчика terminate()
без окон сообщений.
Затем, всякий раз, когда исключение ускользает от любого разрушителя во время разматывания стека, также вызывается terminate()
. set_terminate()
помогает и здесь.
Затем появляется окно сообщения «чисто виртуальный вызов функции», которое отображается в некоторых жестких случаях несоответствия количеству функций, ожидаемых вызывающим, и тем, которые реализованы вызываемым. _set_purecall_handler()
должен помочь здесь.
Что еще нужно сделать с программой VC ++, чтобы быть абсолютно уверенным, что она не отображает окно сообщения в некоторой фатальной ситуации?