地址消毒器https://code.google.com/p/address-sanitizer/wiki/AddressSanitizer
我已经编译了我自己的 llvm(非常直接的编译),因为苹果的 llvm 不支持这个功能。
我已经测试了 mac 命令行程序的 clang,它可以工作(但没有显示源代码行)。
对于iOS,仍然存在一些问题:
- 编译模拟器版本:报告预编译头错误:
在 /Users/fluke/Documents/projects/tmp/testAsanNoARC/testAsanNoARC/testAsanNoARC-Prefix.pch:12 包含的文件中: 在 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/ 包含的文件中SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h:9: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1 .sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:53:24:错误:“UIAccelerometer”不可用:在 OS X 上不可用 - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:( UIAcceleration *) 加速 NS_DEPRECATED_IOS(2_0, 5_0); ^ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1。sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:33:12:注意:声明已在此处明确标记为不可用@interface UIAccelerometer:NSObject { ^ /Applications/Xcode.app/Contents/Developer/Platforms /iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:53:71:错误:'UIAcceleration'不可用:在OS X上不可用-( void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration NS_DEPRECATED_IOS(2_0, 5_0); ... app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:53:71:错误:“UIAcceleration”不可用:在 OS X 上不可用 - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration NS_DEPRECATED_IOS(2_0, 5_0); ... app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:53:71:错误:“UIAcceleration”不可用:在 OS X 上不可用 - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration NS_DEPRECATED_IOS(2_0, 5_0); ...
- 为设备版本编译,它报告缺少 libarc(但实际上我没有启用 ARC)
ld:找不到文件:/Users/fluke/Documents/tools/asan/Debug+Asserts/lib/arc/libarclite_iphoneos.a clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 所以我尝试将它用于单独的库 - 只是新的库目标并使用我自己的clang,而主要目标仍然使用苹果的llvm。程序编译(可能需要链接到内置 llvm 中的 asan dylib),但无法正常工作,因为我需要在程序进入之前加载我的 asan。
谁有这样做的经验?