Clangの静的コード解析ツールscan-buildを使って見た

   2017/04/30

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 epel-release
# yum install clang

 

また、静的コード解析ツールscan-buildをインストールするには、以下のパッケージをインストールします。

# yum install clang-analyzer

 

使い方

さて、これで準備はOKです。次に簡単なC/C++ソースコードをコンパイルしてみます。 (ファイル名をtest.cppとして)

 

ただ、mallocでメモリを割りあてて終了するだけのコードで、特に意味はありません。

コンパイルは、

$ clang++ test.cpp

とするだけです。

コンパイルができることを確認したら、scan-buildをためしてみます。

$ scan-build clang++ test.cpp
scan-build: Using ‘/usr/bin/clang’ for static analysis
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を作成してコンパイルしてると思います。 そういう場合は、

$ scan-build make

 

とするだけで、プロジェクトないの検査を全てしてくれるようです。

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら