9

似乎 功能已从 GCC中删除-fmudflap

因此我的问题是:用什么来代替它来动态分析程序的越界读/写、未初始化的读取和此类问题?

(也许作为一个附带问题:为什么它被删除了?)

mudflap(在编译器中对生成的代码进行工具化)的方法看起来非常优雅。

背景

其他工具在机器代码级别(例如 Purify)、源代码级别(例如 Insure)或在 CPU 仿真期间进行工具化(例如 Valgrind)。

mudflap 方法有可能发现 valgrind 或 purify 无法检测到的错误(例如基于堆栈的数组访问错误)。它也比其他方法更轻量级。

我正在寻找一个开源解决方案。

4

2 回答 2

8

看起来-fsanitize直接替换-fmudflap. 引用 GCC 4.8.2 手册页:

   -fsanitize=address
      Enable AddressSanitizer, a fast memory error detector.  Memory access
      instructions will be instrumented to detect out-of-bounds and use-after-
      free bugs.  See <http://code.google.com/p/address-sanitizer/> for more 
      details.

  -fsanitize=thread
      Enable ThreadSanitizer, a fast data race detector.  Memory access
      instructions will be instrumented to detect data race bugs.  See
      <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for 
      more details.

它也可作为LLVM (>= 3.1) 的一部分使用。

于 2013-11-14T22:02:05.147 回答
2

llvm 中的消毒剂也比 gcc 先进得多,因为主要组对 llvm 有贡献,然后其他人将其移植到 gcc。

http://llvm.org/devmtg/2012-11/#talk4

有作者在 2012 年提供的有关消毒剂的信息。

于 2013-11-15T19:17:44.990 回答