【发布时间】:2021-09-15 08:46:35
【问题描述】:
我想使用 Address Sanitizer 来查找违规行为
int main()
{
int v[] = {1, 2, 3};
int val = v[3];
printf("exiting main\n");
return 0;
}
g++ -W -Wall -fsanitize=address -o my_bin main.cpp -> 我从消毒剂中得到了很多输出
g++ -O2 -W -Wall -fsanitize=address -o my_bin main.cpp -> 只是“退出 main”
因此,添加 -O2 标志会使 Address Sanitizer 找不到违规行为。是这样吗?
我在 Ubuntu 虚拟机上试过,架构是 x86。
g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
【问题讨论】:
-
可能是因为它被优化掉了(
val从未实际使用过)。
标签: gcc optimization address-sanitizer