4

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 にリンクする必要があるかもしれません) が、プログラム エントリの前にロードする必要があるため動作しません。

誰がこれを行った経験がありますか?

4

2 に答える 2

0

元の投稿に記載されているエラーは、ASan 自体とはほとんど関係ありません。-fsanitize=address フラグを指定しなくても、確実に取得できます。iOS 向けのビルドと実行はまだサポートされていませんが、iOS シミュレーターを対象とするアプリをビルドすることはできます。問題なく動作するはずです。さらに質問がある場合は、遠慮なく address-sanitizer@googlegroups.com までお問い合わせください。

于 2013-07-03T09:17:05.420 に答える