有没有办法在使用 g++
编译的 C++ 中进行数组边界检查?
Valgrind 的 Memcheck 无法检测堆栈上分配的数组的溢出。
GCC extension enabled by
-fbounds-checking
是 only implemented for the C front end .
理想情况下,不应以任何方式修改源代码。使用 std::vector
、std::tr1::array
或 boost::array
不是一种选择,因为代码库很大等转移是不可行的。
最佳答案
Google 的 AddressSanitizer是一个编译器检测模块和运行时库,可以检查对堆、堆栈和全局变量等的越界访问。可用in Clang 3.1+和 in GCC 4.8+ .
要使用它,请将 -fsanitize=address
(或旧 Clang 3.1 中的 -faddress-sanitizer
)传递给编译器和链接器(链接 asan
;不需要显式的-lasan
)。要在错误消息中获得更好的堆栈跟踪,请将 -fno-omit-frame-pointer
传递给编译器。
它最初用于 Chromium 测试,以及 since 2012 , 是 used by Firefox devs , 也。有一个不错的blog post on how to get it running with Qt .您可能还想阅读更多上下文 on Wikipedia .
关于c++ - 使用 g++ 构建的 C++ 中的运行时数组边界检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291114/