如何在 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
假设我有以下程序:
#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