在OS X上使用Clang地址检查器

27
我想在OS X Mountain Lion上使用clang地址检查器,因为Valgrind在这个平台上进行内存检查时出现问题。 但是,当我在编译时使用了-fsanitize=address(就像我在这个页面上看到的一样:http://clang.llvm.org/docs/AddressSanitizer.html),我得到了这个错误:clang: error: argument unused during compilation: '-fsanitize=address' 所以,我的问题是如何在OS X上使用Clang地址检查器?如果我不能使用它,我可以用什么工具代替?
我已经下载了带有Xcode的clang,并且它是最新的。(也许这个版本没有地址检查器内置)
3个回答

13

Xcode 7 新增了 Address Sanitizer 功能。

在您的方案中使用 Runtime Sanitization > Enable Address Sanitizer 标志来启用该选项。

然后,git 将显示此更改到您的 .xcscheme 文件:

enableAddressSanitizer = "YES"

来自Xcode 7新功能文档:

Address Sanitizer。Xcode 7可以使用专门设计的工具构建你的应用程序,以便使用地址探查器捕获和调试内存损坏。

Objective-C和C代码容易受到内存损坏问题的影响,例如堆栈和堆缓冲区溢出以及使用后释放问题。当这些内存违规发生时,应用程序可能会不稳定地崩溃或显示奇怪的行为。内存损坏问题很难跟踪,因为崩溃和奇怪的行为通常很难复现,并且问题的起源可能与其原因相差甚远。

启用Address Sanitizer

你可以在构建方案中启用地址探查器。一旦启用,将添加的工具构建到应用程序中,以立即捕获内存违规,使你能够在发生问题的地方检查问题。还提供其他诊断信息,例如错误地址与堆上有效对象之间的关系以及分配/取消分配信息,可帮助你快速定位和修复问题。

地址探查器非常高效-足够快,可以常规使用,并与交互式应用程序一起使用。它支持OS X,在模拟器上和iOS设备上。


11

6
根据来源(特别是如果您从苹果的开源网站Apple's Open Source Site获取clang-425.0.24捆绑包),测试文件src/tools/clang/test/Driver/darwin-asan-nofortify.c
// rdar://11496765, rdar://12417750
// -faddress-sanitizer is not currently supported.
// XFAIL: *

当然,在使用-faddress-sanitizer时会出现错误,因此在OS X下,您需要从更新的源代码中自己构建clang才能获得地址sanitizer。

命令行选项

尝试使用-faddress-sanitizer而不是-fsanitize=address。苹果的版本似乎基于较旧版本的CLANG,如果运行 clang --help ,则在该版本中所有卫生器都采用此形式。


4
我也遇到了一个错误:clang: error: unsupported option '-faddress-sanitizer'。然而,在 clang --help 中,我可以看到这个选项。 - Guillaume
@gaige:问题在于苹果正在部署一个较旧的Clang版本,该版本仍使用旧的-faddress-sanitizer。当其他sanitizer被添加时,较新的-fsanitize=address才加入其中。 - 0xC0000022L
很抱歉,我以为在我说“你需要从更新的源码构建clang”时已经表达了这一点。诚然,它并没有明确表示Apple版本较旧,但它确实建议从更新的版本构建。我会更新语言以使其更清晰明了。 - gaige
1
@gaige:我的主要观点是关于这句话“由于某种原因,苹果的版本似乎已经改变了CLANG文档中的内容”,这似乎表明苹果的Clang更加新。请勿误解,但这让我感到困惑,因此我认为有必要发表评论。 - 0xC0000022L
Xcode 5.1.1提示clang: error: argument '-faddress-sanitizer'已过时,请使用'-fsanitize=address'代替。然而,它似乎仍不支持fsanitize=address:clang: error: unsupported argument 'address' to option 'fsanitize='。 - David Snabel-Caunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接