Ubuntu 12.10でClang 3.4を実行しています( http://llvm.org/apt/ から)。アナライザー(clang --analyze)をいくつかのコードで実行したところ、いくつかの問題が見つかりました。
Blah.C:429:9: warning: Declared variable-length array (VLA) has zero size
unsigned char separatedData[groupDataLength];
^~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
しかし、特定の問題は重要ではありません。その結論に至るまでの手順を知りたい(コードは15分以内に表示されないほど複雑なコードです)。
Webブラウザで表示された作業手順を示すClangサイトのスクリーンショットが表示されます。
それはおそらくXcodeから取得されます。
問題は次のとおりです。コマンドラインからClangにそのような作業手順を出力させるにはどうすればよいですか?または、必要に応じてブラウザに結果を出力することもできますか?これにより、アナライザが大幅に便利になり、修正がより迅速になります。
(GCCのドキュメントは非常に優れていることに気づきましたが、Clang/LLVMのドキュメントは非常に貧弱です。 "clang --analyze -Xanalyzer '-v'"をスタブとして試してみて、アナライザーに冗長であることを伝えました--Xanalyzerスイッチは、manページからのものでした。)
コンソールのテキスト出力に加えて:
clang++ --analyze -Xanalyzer -analyzer-output=text main.cpp
完全なhtml出力を取得できます。
clang++ --analyze -Xanalyzer -analyzer-output=html -o html-dir main.cpp
さらに、特定のチェッカーを選択して有効にすることができます。 このページ 使用可能なチェックをリストします。たとえば、次のフラグを使用して、アルファグループのすべてのC++チェックを有効にできます。
-Xanalyzer -analyzer-checker=alpha.cplusplus
http://coliru.stacked-crooked.com/a/7746c4004704d4a7
main.cpp:5:1: warning: Potential leak of memory pointed to by 'x'
}
^
main.cpp:4:12: note: Memory is allocated
int *x = new int;
^~~~~~~
main.cpp:5:1: note: Potential leak of memory pointed to by 'x'
}
^
どうやらフロントエンドが露出している
-analyzer-config
<オプション名> = <値>
例えば。
-analyzer-config -analyzer-checker=alpha.cplusplus
これは-Xanalyzer
よりもサポートされている可能性があり、個々のチェッカーのオプションをサポートするように拡張される可能性があります。 http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-October/039552 .html
あなたは正しい軌道に乗っていますが、バグにつながる完全なトレースを取得するには、clangにテキスト形式の出力を要求する必要があります(理由は尋ねないでください)。あなたはおそらく例えば調整する必要があるのでとにかく、プロジェクトのパスまたは定義を含めます。clangのアナライザーパスのラッパーとして機能するclang-check
を使用することをお勧めします。また、たとえば、で公開されている静的アナライザーツールにフックすることもできます。 scan-build
。次にできます
$ clang-check -analyze -extra-arg -Xclang -extra-arg -analyzer-output=text
あなたがこれらの非常に素晴らしいツールのドキュメントを書いたように、ひどいです。私は上記のコールをビットからまとめました Chandler CarruthのGoingNative2013トーク からの断片。
Scanbuildを使用する必要があります: http://clang-analyzer.llvm.org/scan-build.html
ビルドを生成するコマンドを入力しますが、それらの前にscan-buildを付加します。
例:代わりに
make
タイプ
scan-build make
の代わりに
./configure
make
タイプ
scan-build ./configure
scan-build make
アナライザーを起動する前にビルドをクリアします。それ以外の場合、makeはすべてが既にビルドされており、アナライザーが実行されないことを示します。