C/C++ 静的ソースコード解析ツールCppcheck使い方

   2017/04/30

Cppcheckは、コマンドラインで使えるツールで、他のコンパイラやツールが行うような構文エラーの検査をしない代わりに、コンパイラが見つけられないようなバグを見つけることを目的にしています。 但し、今のところ完成にはほど遠い状態であるらしい。 Cppcheckが見つけられないバグも沢山あるとのこと。 ソフトウェアは、注意深く実行して検査する方がCppcheckより多くのバグを見つけられると作者が言っているようです。 過信しないで補助的に使うのが良いかもしれません。

Cppcheckは、いろいろな設定ができるのですが、まずはシンプルにインストールしてみてソースコードにバグがあるか検査してみてはどうでしょうか?

今回も動作させた環境は、以下となります。

  • CentOS6.8 x86_64

Install

CentOS6のベースパッケージにcppcheckが含まれていないようですので、epelを入れてからcppcheckパッケージをインストールします。

yum install epel-release
yum install cppcheck

以上でインストールは完了です。

使い方

clangの静的コード解析ツールscan-buildで紹介したのと同じサンプルコードで試してみます。

 

これをtest.cppというファイル名で保存し、以下のコマンドを実行してみます。

$ cppcheck ––enable=all test.cpp
Checking test.cpp…
[test.cpp:11]: (error) Memory leak: ptr
Checking usage of global functions..
(information) Cppcheck cannot find all the include files (use –check-config for details)

 
scan-buildで調べたときと同様に、ptrがメモリーリークであると示していますね。

別の簡単なサンプルをもう一つ。

 

cppcheckをこのサンプルに対して実行してみると。

$ cppcheck test.cpp
Checking test.cpp…
[test.cpp:5]: (error) Array ‘x[10]’ accessed at index 10, which is out of bounds.

 
作成した配列の範囲を超えたところにアクセスしていることを教えてくれています。 但し、clangとかでコンパイルするとこの辺りのエラーも教えてくれるので。。。

$ clang test.cpp
test.cpp:5:5: warning: array index 10 is past the end of the array (which contains 10 elements) [-Warray-bounds]
x[10] = 0;
^ ~~
test.cpp:4:5: note: array ‘x’ declared here
char x[10];
^
1 warning generated.

 
今回は、設定無しの状態でCppcheckを紹介しましたが、細かい設定はまた別の機会に再チャレンジします。

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

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