如何在 clang-sanitizer 发现错误时终止 clang-instrumented 程序?

How to terminate clang-instrumented program when clang-sanitizer finds an error?

假设我有以下程序:

#include <iostream>

float foo(float f)
    { return (f / 0); }

int main(void) {
    foo(1.0f);
    std::cout << "hello" << std::endl;
}

如果我调用 clang++ -fsanitize=undefined main.cpp && ./a.out 那么它将输出:

main.cpp:4:32: runtime error: division by zero
hello

有没有办法在检测到错误后立即终止 a.out? IE。以这样的方式显示:

main.cpp:4:32: runtime error: division by zero

不在下一行显示 hello? (因为它会在之前终止)

您需要使用 -fno-sanitize-recover 命令行参数:

clang++ -fsanitize=undefined -fno-sanitize-recover=undefined main.cpp