我正在尝试单元测试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(它不使用单独的地址空间进行单元测试)。唯一的硬性要求是保持在C领域。
非常感谢任何指导。谢谢!