Как отменить & quot; фатальную ошибку & quot; обнаружение в BOOST TEST

Я получаю ошибку: unknown location(0): fatal error in "suite_1_test_1": child has exited; pid: 5817; uid: 0; exit value: 255

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

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

Можно ли как-то отключить его на мгновение?

Спасибо

2

Решение

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

Ошибка boost :: unit_test, потому что дочерний процесс завершается с ненулевым значением

просто делать
#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”,

2

Другие решения

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

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

1

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector