当使用clang和/或gcc时,有没有办法可以让编译器默认执行有符号整数溢出检查(例如,如果检测到则中止) - 但同时选择检查特定变量或操作?
答案 0 :(得分:0)
我可以推荐你KINT。例:()
动态检查:
使用clang++
使用-fsanitize=undefined
标记编译和链接您的程序。确保使用clang++
(不是ld
)作为链接器,以便可执行文件与正确的UBSan运行时库链接。如果您正在编译/链接C代码,则可以使用clang
代替clang++
。
% cat test.cc
int main(int argc, char **argv) {
int k = 0x7fffffff;
k += argc;
return 0;
}
% clang++ -fsanitize=undefined test.cc
% ./a.out
test.cc:3:5: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
为每种检查定义所需的行为:
fsanitize=...
:打印详细的错误报告并继续执行(默认); fno-sanitize-recover=...
:打印详细的错误报告并退出程序; fsanitize-trap=...
:执行陷阱指令(不需要UBSan运行时支持)。详细信息: