2017-01-13 4 views
4

Скажем, у меня есть следующая программа:Как прекратить программу clang-instrumented, когда clang-sanitizer обнаруживает ошибку?

#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 как только обнаружена ошибка? То есть таким образом, чтобы она отображала:

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

без отображения hello на следующей строке? (Потому что это будет прекращено раньше)

+0

Связанные: http://stackoverflow.com/q/30809022/420683 -> вы можете использовать переменная среды 'UBSAN_OPTIONS = halt_on_error = 1' – dyp

ответ

4

Вы должны использовать -fno-sanitize-recover аргумент командной строки:

clang++ -fsanitize=undefined -fno-sanitize-recover=undefined main.cpp 
Смежные вопросы