модульное тестирование C-функции, ожидающей SIGSEGV - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь выполнить модульное тестирование кода на C / glibc, который, как мне известно, приводит к неопределенному поведению, но завершится неудачно с SEGV, если будут выбраны соответствующие параметры компилятора.Что-то вроде:

void will_fail(char *bar) {
    bar[10000] = 'X';
}

void test_will_fail(void) {
    will_fail("foo");    // How can I handle this failing?
}

Есть ли способ перехватить следующий SEGV, возможно, специфичный для GCC или asm?Если ему нужно отдельное адресное пространство (fork / exec), какой хороший способ сказать, что порожденный процесс завершился с SEGV?

Я использую c11 / x86-64 / glibc 2.26 / gcc 7.2.0с -fsanitize = address / CUnit (который не использует отдельное адресное пространство для модульных тестов).Единственное жесткое требование - оставаться в царстве С.

Любое руководство очень ценится.Спасибо!

...