次のようにAddressSanitizerフラグを追加しました。
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
Unix Makefiles
を使用すると、すべてが正常にビルドおよび実行されます。
Xcodeプロジェクトを生成するときに問題が発生します。ASanライブラリが見つからないため、リンクしたくないだけです。
すでに2つのソリューションを見つけましたが、CMakeだけでは自動化できないため、使用しないことにしました。
-Wl,-undefined,dynamic_lookup
を追加すると、動的ライブラリへのリンクがスキップされます。libclang_rt.asan_osx_dynamic.dylib
と直接リンクします。では、これら2つのソリューションの問題点は何ですか?
DYLD_INSERT_LIBRARIES
を指すlibclang_rt.asan_osx_dynamic.dylib
環境変数を追加する必要があります。さらに、別のソリューションとして、XcodeターゲットスキームからAddress Sanitizerフラグを有効にしようとしましたが、興味深いことに、追加した問題を検出できませんでした。したがって、テストに失敗したため、これをソリューションとしてリストしませんでした。
どんな助けも大歓迎です。
リンカにもフラグを提供する必要があります。私はこれを次のようにしています:
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
cmake 3.13
xcode schema の設定を導入
cMakeで
cmake_minimum_required(VERSION 3.13)
set(CMAKE_XCODE_GENERATE_SCHEME ON)
set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER ON)
set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN ON)
ビルドするとき
xcodebuild -enableAddressSanitizer YES
私が現在見つけた最も簡単な解決策は
cmake -DCMAKE_BUILD_TYPE=ASAN .
このオプションは、多くのフラグを変更するのではなく、意図(サニタイザーの実行)を表現するため、このオプションの方が好きです。
このオプションがいつ追加されたかはわかりません。また、ドキュメントも見つかりません。