2

AddressSanitizer と MemorySanitizer は非常に便利なツールですが、プログラム全体を適切にインストルメント化する必要があります。(少なくとも、AddressSanitizer の Clang バージョンについては、MemorySanitizer ドキュメントのhereと、 AddressSanitizerClangVsGCCの「グローバルにプライベート エイリアスを使用する」セクションを参照してください。)

つまり、ASan または MSan を有効にするには、すべてのライブラリ依存関係を適切なコンパイラ フラグを使用してビルドする必要があります。さまざまなサードパーティの依存関係を必要とする典型的な Linux アプリケーションの場合、これを行う実際的な方法は何ですか? Sanitizers は明らかに Google プロジェクトであり、Google コードはほとんど独自の monorepo と独自のビルド ツールを使用しているだけの印象を受けますが、これは平均的な開発者の手の届かないところにある可能性があります。多くの余分なインフラストラクチャやビルド スクリプトに投資することなく、Sanitizers を使用してライブラリをビルドする簡単な方法はありますか?

4

2 に答える 2

1

サニタイザーは、システムの依存関係を再構築することなく、独自のコードで簡単に使用できます。私は、GCC と Clang の両方を使用して、RHEL 6 および 7 で大規模な (っぽい) 2M 行のコード ベースを日常的に使用していますが、これは問題ではありません。問題がある場合。あなたはそれを間違っています(または修正が必要なバグがどこかにあります)。

于 2017-03-15T22:40:46.937 に答える