Как отключить диалоги исключений «Библиотека отладки Microsoft Visual C ++»? - PullRequest
8 голосов
/ 05 августа 2010

Если я запускаю исполняемый файл, который выбрасывает исключение (встроенное в отладку), я получаю диалоговое окно с сообщением об ошибке вроде «Отладка не удалось подтвердить» и затем некоторую информацию об исключении. Пока это происходит, выполнение программы приостанавливается, пока я не выберу один из вариантов «Прервать», «Повторить» или «Пропустить».

Дело в том, что я запускаю множество приложений из скрипта, и если одно из них выдает исключение, он приостанавливает мой скрипт до тех пор, пока он не будет обработан.

Есть ли способ отключить этот механизм обработки исключений?

РЕДАКТИРОВАТЬ: Я помню, как читал некоторое время о разделе реестра, который отключил бы появление сообщений об ошибках. Кто-нибудь знает об этом?

Ответы [ 3 ]

4 голосов
/ 05 августа 2010

Если вы можете изменить источник приложений, посмотрите на функцию _CrtSetReportMode, например:

_CrtSetReportMode(_CRT_ASSERT, 0);

См. msdn для получения дополнительной информации.

3 голосов
/ 15 декабря 2012

Если вы можете изменить источник, поведение отмены (вызываемое assert) необходимо изменить, чтобы подавить диалоговое окно отмены / повторных попыток / игнорирования.

При прерывании будет по-прежнему создаваться аварийный дамп (по умолчанию), поэтому вы не потеряете то, что важно.

Кроме того, вы можете настроить поведение assert для записи только в stderr. Это НЕ требуется, если поведение прерывания соответствует тому, что вы хотите. Примечание: вызовы _Crtxxx активны только в отладочных сборках (/Zi).

Минимальное изменение для отключения отмены / повторной попытки / игнорирования. Раскомментируйте вызовы _Crt и включите crtdbg.h, чтобы также изменить поведение assert в сборках в режиме отладки.

#include <stdlib.h>
//#include <crtdbg.h>
int main(int argc,char **argv);
int main(int argc,char **argv)
{
    // ON assert, write to stderr.
    //_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
    //_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );

    // Suppress the abort message
    _set_abort_behavior( 0, _WRITE_ABORT_MSG);

    abort();
    return 0;
}

Режим подтверждения MSDN

1 голос
/ 05 августа 2010

Можете ли вы собрать свои исполняемые файлы как релиз? Если я вспомню, это должно остановить появление ошибок утверждения.

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