OS X上的Clang Address Sanitizer

Gui*_*ume 27 macos clang sanitizer address-sanitizer

我想在OSX Mountain Lion上使用clang address sanitizer,因为Valgrind在这个平台上有内存检查问题.但是当我-fsanitize=address在编译期间(就像我在这个页面上看到的那样:http://clang.llvm.org/docs/AddressSanitizer.html)时,我收到了这个错误:clang: error: argument unused during compilation: '-fsanitize=address'

所以,我的问题是如何在OS X上使用Clang Address Sanitizer?如果我不能使用它,我可以使用哪种工具?

我有Xcode的下载文件,它是最新的.(也许这个版本没有用它来解决消毒剂的问题)

pka*_*amb 13

地址Sanitizer已添加为Xcode 7中的新功能.

使用方案中的Runtime Sanitization> Enable Address Sanitizer标志启用该选项.

然后git会将此更改显示在您的.xcscheme文件中:

enableAddressSanitizer = "YES"
Run Code Online (Sandbox Code Playgroud)

来自Xcode 7文档中的新功能:

地址Sanitizer.Xcode 7可以使用旨在使用地址清理程序捕获和调试内存损坏的工具来构建您的应用程序.

Objective-C和C代码容易受到内存损坏问题的影响,例如堆栈和堆缓冲区溢出以及释放后使用问题.当发生这些内存违规时,您的应用程序可能会无法预测崩溃或显示奇怪的行为.内存损坏问题很难追查,因为崩溃和奇怪的行为往往难以重现,原因可能远远不是问题的根源.

启用地址清理程序

您在构建方案中启用地址清理程序.启用后,应用程序内置了添加的工具以立即捕获内存冲突,使您能够在发生问题的位置检查问题.还提供了其他诊断信息,例如故障地址与堆上的有效对象之间的关系以及分配/解除分配信息,这有助于您快速查明并修复问题.

地址清洁剂的效率足够快,可以定期使用,也可以与交互式应用程序一起使用.它在OS X,模拟器和iOS设备上受支持.


小智 11

Xcode中的AddressSanitizer支持还没有完全成熟.请考虑使用主干Clang(有关构建说明,请参阅http://code.google.com/p/address-sanitizer/wiki/HowToBuild)


gai*_*ige 6

根据消息来源(特别是如果你从Apple的开源网站获取clang-425.0.24捆绑包,测试文件:src/tools/clang/test/Driver/darwin-asan-nofortify.c

// rdar://11496765, rdar://12417750
// -faddress-sanitizer is not currently supported.
// XFAIL: *
Run Code Online (Sandbox Code Playgroud)

当然,使用时会出现错误-faddress-sanitizer,所以看起来在OS X下,您需要自己从更新的源代码构建clang才能获得地址清理程序.

命令行选项

尝试使用-faddress-sanitizer而不是-fsanitize=address.Apple的版本似乎是基于较旧版本的CLANG,如果你运行clang --help,那么这个版本中的消毒剂就是这种形式.

  • 我也得到了一个错误:`clang:错误:不支持的选项'-faddress-sanitizer'.但是,在`clang --help`中我可以看到这个选项 (4认同)