Clangの静的コード解析ツールscan-buildを使って見た
C/C++ のコーディングする人は、Clangをコンパイラとして使っている人も多いかと思います。 そこで今回は、Clangに付いている静的コード解析ツール、scan-buildを試してみました。
動作させた環境は、以下となります。
- CentOS6.8 x86_64
- clang-3.4.2
まずは、clangがCenOS6.8にはデフォルトで入っていませんので、パッケージをインストールしてC/C++のソースコードをclangでコンパイルできるようにしてみます。
Install
CentOS6のベースパッケージにclangのパッケージがないのでepelを入れてからclangをインストールしてみました。
# yum install clang
また、静的コード解析ツールscan-buildをインストールするには、以下のパッケージをインストールします。
使い方
さて、これで準備はOKです。次に簡単なC/C++ソースコードをコンパイルしてみます。 (ファイル名をtest.cppとして)
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdlib.h> int main() { char *ptr; ptr = (char*)malloc(1000 * sizeof(char)); if ( ptr == NULL ){ return -1; } return 0; } |
ただ、mallocでメモリを割りあてて終了するだけのコードで、特に意味はありません。
コンパイルは、
とするだけです。
コンパイルができることを確認したら、scan-buildをためしてみます。
test.cpp:11:12: warning: Potential leak of memory pointed to by ‘ptr’
return 0;
^
1 warning generated.
scan-build: 1 bugs found.
scan-build: Run ‘scan-view /tmp/scan-build-2017-03-10-181508-953-1’ to examine bug reports.
charへのポインタptrがメモリーリークの可能性があるとワーニングが出ています。 mallocでメモリを確保していますが、freeしていないからですね。 また、/tmp/scan-build-2017-03-10-181508-953-1 のディレクトリは以下にいくつかファイルが作成されています。このなかのindex.htmlファイルをブラウザから開いてあげると以下の様な表示になります。
ソースコードファイルが少なければ、それぞれテストしてもいいですが、通常はMakefileを作成してコンパイルしてると思います。 そういう場合は、
とするだけで、プロジェクトないの検査を全てしてくれるようです。
この記事へのコメントはこちら
コメントを投稿するにはログインしてください。