問題タブ [msan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - メモリーサニタイザー
Ubuntu 14.04でClang 3.7.0を使用してMemory Sanitizerをいじっています。次のコードは完全に機能します。
でコンパイルすると
私はエラーを期待していました。ans が初期化されていないという事実を Memory Sanitizer はキャッチしませんか?
ご協力いただきありがとうございます。
c++ - プロジェクトのサンプル プロジェクトからメモリ サニタイズの結果を再現できません
fedora rpm スペックファイルを使用してソースからビルドされた centos7、clang-3.6.1 からまったく同じ結果が得られます。Ubuntu 14.04、clang-3.4
https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowToの wiki の手順 を可能な限り忠実に使用します。このページの最終更新は 6 か月前です。
googlest リビジョン 613 はまだ tr1 を使用しています
googletest を tip (746) に更新すると、次の警告が表示されてコンパイルされます
そして、そのページからの些細な提案されたケースは、msan によって取り上げられませんでした
非常に大きなmmapを使用しているため、valgrind barfsが発生するプロジェクトがあるため、メモリのサニタイズが非常に役立ちます。私が何か間違ったことをしている場合。どうやら googletest がエラーを抑制しているようです。Google テストを削除し、テスト ケースを
if(foo[4] == 'z') std::cout << "z です" << std::endl;
期待どおりに明らかなエラーの報告をトリガーします
単体テスト ライブラリでメモリ サニタイズを使用することは可能ですか?
c - -fsanitize=memory がいつ使用されているかを判断する方法は?
メモリサニタイザーが使用されているときにFD_ZERO
、誤検知をクリアしたいと考えています。FD_SET
クリアするのはやや簡単です。
ただし、メモリサニタイザーが使用されていることを検出する方法がわかりません。つまり-fsanitize=memory
、コマンド ラインでいつ指定されたかを検出します。プリプロセッサは役に立っていないようです:
がいつ使用されているかを判断するにはどうすればよい-fsanitize=memory
ですか?
cmake - compile-rt のみ (libgcc なし) に対してリンクするメモリ サニタイザー インストルメント化された libc++ をビルドできませんか?
llvm ツールチェーン (libc++、libunwind、compiler-rt、clang ...) を使用して、コード リポジトリで c++ メモリ サニタイザー (msan) を使用したいと考えています。したがって、最初に行う必要があるのは、msan-instrumented libc++ をビルドすることです。
MemorySanitizerLibcxxHowToから、オプション-DLLVM_USE_SANITIZER=Memory
orを指定して libc++ をビルドする必要があります-DLLVM_USE_SANITIZER=MemoryWithOrigin
。
完全なllvmツールチェーンの組み立てから、LLVM’s compiler runtime library
セクションで
libc++ および/または libc++abi を使用している場合は、-DLIBCXX_USE_COMPILER_RT=YES および/または -DLIBCXXABI_USE_COMPILER_RT=YES を cmake に渡して、libgcc_s ではなく compiler-rt を使用するように構成する必要がある場合があります。そうしないと、両方のランタイム ライブラリがプログラムにリンクされてしまう可能性があります (これは通常、無害ですが、無駄です)。
私は完全なllvmツールチェーンを目指しているので、追加する必要があると思い-DLIBCXX_USE_COMPILER_RT=YES
ます-DLIBCXXABI_USE_COMPILER_RT=YES
そこで、以下のスクリプトを使用して libcxx と libcxxabi をダウンロードし、予想されるディレクトリ レイアウトを作成してビルドを実行します。
私が得るエラーは次のとおりです。
-DLLVM_USE_SANITIZER=Memory
このエラーは、-DLIBCXX_USE_COMPILER_RT=YES
両方が存在する場合にのみ発生します。それらのいずれかを削除すると、問題が解決します。
問題を修正し、両方のオプション (msan とコンパイラ rt) を維持する方法はありますか? 前もって感謝します!