Address-Sanitizer https://code.google.com/p/address-sanitizer/wiki/AddressSanitizer
Appleの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)加速度計:(UIAccelerometer *)加速度計 didAccelerate:(UIAcceleration *)加速度 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 を使用します)
- だから私はそれを別のlibに使用しようとしました.libターゲットを新しくし、メインターゲットがまだAppleのllvmを使用している間に独自のclangを使用します。プログラムはコンパイルされます (ビルドされた llvm の asan dylib にリンクする必要があるかもしれません) が、プログラム エントリの前にロードする必要があるため動作しません。
誰がこれを行った経験がありますか?