Windows: предотвращение сбоев assert () при открытии всплывающего окна отладки - PullRequest
3 голосов
/ 27 января 2010

Как я могу предотвратить появление всплывающего окна отладки при сбое подтверждения на компьютере с Windows? Приложение, которое я пишу, основано на консоли, и я использую assert () для проверки определенных вещей, когда оно выполняется в тестовом режиме. Я использую MinGW + GCC 4.

Редактировать: это тестовая программа.

#include <stdlib.h>
#include <assert.h>

int main(void) {
    _set_error_mode(_OUT_TO_STDERR);
    assert(0 == 1);
    return EXIT_SUCCESS;
}

Флаги: gcc -mwindows -pedantic -Wall -Wextra -c -g -Werror -MMD -MP -MF ...

Пробовал и без -mwindows. Я все еще получаю всплывающее окно отладки, несмотря ни на что. Это на компьютере с Vista x86.

Ответы [ 2 ]

3 голосов
/ 12 февраля 2010

Есть много способов сделать это. Самое сложное - переопределить макрос assert (см. Заголовок mingw assert.h). Вы также можете позвонить (что я бы посоветовал):

_set_error_mode (_OUT_TO_STDERR);

Редактировать: Действительно, у меня это работает:

#include <stdlib.h>
#include <assert.h>

int main (void)
{
  _set_error_mode (_OUT_TO_STDERR);
  assert (0 == 1);
  return 0;
}

Скомпилируйте с gcc -mwindows, диалоговое окно не отображается во время выполнения. Удалите строку с _set_error_mode, и она показывает диалоговое окно. Если это не работает для вас, приведите полный пример.

2 голосов
/ 07 января 2013

Вот то, что я использую, и это, кажется, работает:

SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
...