2013-04-18 1 views
2

Я получаю сообщение об ошибке: unknown location(0): fatal error in "suite_1_test_1": child has exited; pid: 5817; uid: 0; exit value: 255Как отменить обнаружение «фатальной ошибки» в BOOST TEST

Внутри suite_1_test_1 я запускаю программу A с execvp() (после fork()), который может быть выход с кодом ошибки, который не 0 , этот код ошибки указывает, что случилось с программой A.

Проблема в том, что если я получаю это fatal error, я не могу обработать значение exit(), и BOOST TEST выйдет немедленно.

Могу ли я как-то отключить его?

Благодаря

+1

Вы имеете в виду под этим «Как найти и исправить неизвестную ошибку?»? –

+0

Нет, я имею в виду «Как отключить фатальное обнаружение ошибок» или что-то в этом роде ... – hudac

+0

Какую ОС вы используете? –

ответ

2

Ну, это можно сделать так:

boost::unit_test case fails because a child process exits with nonzero

вобще #define BOOST_TEST_IGNORE_NON_ZERO_CHILD_CODE перед #define BOOST_TEST_MODULE aot_test_module в main()

При использовании разделяемых библиотек, работают с параметром командной строки --catch_system_errors=no или export BOOST_TEST_CATCH_SYSTEM_ERRORS=“no”.

0

Как я понимаю execvp) replaces тестовая программа (. Так что Boost.Test больше не работает. Он возвращается только в случае отказа. Я бы не использовал его в этом контексте с Boost.Test.

+0

I 'fork()' раньше, извините за отсутствие упоминания об этом – hudac

1

Кажется, что усиление регистрирует обработчики сигналов или другие вещи, которые все еще ловят ошибки из раздвоенного (и переопределенного) процесса. Вам будет трудно «отвязать» тестовую структуру от этого дочернего процесса.

Однако модульные тестовые рамки редко используются вместе с нерестом дочерних процессов, поэтому я бы просто не использовал fork и exec * внутри Boost.Test. Фактор этих вызовов из единиц, которые вы тестируете. В конце концов, процесс не является подписным модулем, это скорее целостный компонент. Я предполагаю, что у вас не будет много таких подпроцессов, поэтому не следует слишком сильно болеть, чтобы протестировать сотрудничество этих процессов с другой структурой или просто с простым скриптом.

+0

Спасибо, значит «нет» – hudac

+0

означает «может быть, с невыносимым количеством работы и глубоким пониманием внутренних органов Boost.Test». Хорошо, это, вероятно, «нет» для большинства людей, включая меня;) –