問題タブ [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.

0 投票する
3 に答える
2121 参照

c++ - メモリーサニタイザー

Ubuntu 14.04でClang 3.7.0を使用してMemory Sanitizerをいじっています。次のコードは完全に機能します。

でコンパイルすると

私はエラーを期待していました。ans が初期化されていないという事実を Memory Sanitizer はキャッチしませんか?

ご協力いただきありがとうございます。

0 投票する
2 に答える
427 参照

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;

期待どおりに明らかなエラーの報告をトリガーします

単体テスト ライブラリでメモリ サニタイズを使用することは可能ですか?

0 投票する
1 に答える
237 参照

c - -fsanitize=memory がいつ使用されているかを判断する方法は?

メモリサニタイザーが使用されているときにFD_ZERO、誤検知をクリアしたいと考えています。FD_SETクリアするのはやや簡単です。

ただし、メモリサニタイザーが使用されていることを検出する方法がわかりません。つまり-fsanitize=memory、コマンド ラインでいつ指定されたかを検出します。プリプロセッサは役に立っていないようです:

がいつ使用されているかを判断するにはどうすればよい-fsanitize=memoryですか?

0 投票する
0 に答える
316 参照

cmake - compile-rt のみ (libgcc なし) に対してリンクするメモリ サニタイザー インストルメント化された libc++ をビルドできませんか?

llvm ツールチェーン (libc++、libunwind、compiler-rt、clang ...) を使用して、コード リポジトリで c++ メモリ サニタイザー (msan) を使用したいと考えています。したがって、最初に行う必要があるのは、msan-instrumented libc++ をビルドすることです。

MemorySanitizerLibcxxHowToから、オプション-DLLVM_USE_SANITIZER=Memoryorを指定して 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) を維持する方法はありますか? 前もって感謝します!