为了更好地防止 UB 案例,例如:
#include <stdio.h>
int f(){
int x;
return x;
}
int main()
{
f();
while(1);
return 0;
}
我今天更新了我的 GCC,所以我可以使用ubsan。我当前的版本是 5.3.0 根据gcc --version
. 我以为ubsan会被这个更新添加,但似乎不是因为用C:\Users\my_name\Desktop>gcc -fsanitize=undefined a.c
这个编译后得到的是:
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: 找不到-lubsan
现在,我已经看过这篇文章,但是操作系统是Ubuntu 15.04
并且我使用的是Win 8.1
所以这对我没有帮助。这里的评论之一说:
您将需要安装 libubsan 软件包。
但我不知道它是否适用于windows/ubuntu
,即使它适用于windows
用户,我也不知道该怎么做。
编辑:我也尝试过编译(这里gcc -fno-sanitize=all a.c
有很多选项)并且编译时没有警告,所以我猜想以某种方式识别消毒剂(因为它编译好)但由于某种原因拒绝了我的原始编译尝试GCC