Я пытаюсь выполнить модульное тестирование кода на 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 (который не использует отдельное адресное пространство для модульных тестов).Единственное жесткое требование - оставаться в царстве С.
Любое руководство очень ценится.Спасибо!