CppCheck の Windows へのインストールと使い方

フリーの静的解析ツールでは CppCheck が有名です。 今回はこの CppCheck の Windows へのインストール方法と使い方について説明します。

CppCheck とは

静的解析ツールとは

CppCheck は C++ 用の静的解析ツールです。
この静的解析ツールというのは、 ソースコードを解析して、問題点を探してくれるツールです。 テストの実行など実際に"動"作させることことなく、ソースコードから問題点を探すので、 "静"的解析ツールと呼ばれます。

見つけてくれる問題点を大きく分けると次の 2 つです。
  1. よくないコード
  2. 実際のバグの発生箇所
1. の「よくないコード」というのは、実際には問題ないかもしれないけど危険なコードや コーディングルール的によくないコードです。 例えば、 "if 条件内での = や変数を初期化せずに使う"、 "引数一つなのに explict をつけていないコンストラクター" などです。コンパイラーのワーニングの強化版といった機能です。

2. は実際にバグとなる箇所を見つけてくれます。
ソースをツールにかけるだけでバグが見つかるのですから、 すごい機能です。 ただ、 1. に比べて高度な機能で、 すべてのバグを見つけてくれるような神がかり的なツールはありません。

CppCheck の特徴

静的解析ツールは実はたくさんあるのですが、 たいていは有料で、個人では手がでないほど高価なことが多いです。
それでも、企業としては一番お金がかかるのは人件費ですから、 導入されることはめずらしくありません。


そんな中、 CppCheck はフリーです。

フリーということで気になるのは機能ですが、 前節の 1. の機能に関しては、基本的なチェックは行えて、 十分なものではないかと思います。

2. に関しては、不正なメモリーアクセスなど メモリー管理に特化したバグを見つけてくれるらしいです。
ただ、個人的にはそれに関してあまり検出されたことがないので、よく分かりません。

どちらにしろ、フリーですし、使ってみて損はありません。

また、コマンドラインの、有名なツールですので、 他のプログラムから利用できるようになっていることが多いです。
例えば、 Jenkins と組み合わせてビルドと一緒に静的解析をしたり、 SonarQube と合わせて品質管理に使ったりといったことができます。

インストール

以下のサイトからインストーラー(cppcheck-X.XX-(x86|x64)-Setup.msi)をダウンロードします。 インストーラーを実行するとウィザードが表示されます。

soft_cppcheck_setup.png

ウィザードでは基本的にデフォルトのままでかまいません。
変更するとしたら、上記の画面でインストール先(Location)を変更するか、 Python のアドオンを追加するぐらいです。

使い方

CppCheck 自体はコマンドラインのツールですが、 GUI のフロントエンドプログラムも用意されています。 今回はその両方の使い方を説明します。

使い方(GUI 版)

スタートメニューの [Cppcheck] から CppCheck のフロントエンドを起動します。

soft_cppcheck_start.png

soft_cppcheck_main.png


メニューの [ファイル] → [新規プロジェクト] でプロジェクトを作成します。

soft_cppcheck_new.png


まず、ファイルダイアログが表示されるので、保存するプロジェクトファイルのファイル名を指定します。
その後、プロジェクトの設定画面が出てくるので、 [パス] にソースファイルの場所を設定します。

soft_cppcheck_addpath.png


ソースのパスさえ指定すれば、実行できるのですが、それ以外でよく設定するのは次の 2 つです。
  • [Includes]
  • [除外する]
soft_cppcheck_includes.png

[Includes] では、 boost など外部ベンダーのヘッダーの場所を指定します。
指定しなくてもチェックはできるのですが、指定した方がより正確になるらしいです。


soft_cppcheck_excludes.png

サンプルコードやテストコードなどチェック対象から外したいフォルダーもあります。 そういったフォルダーは [除外する] で指定します。
ただ、不具合のせいか、今は設定しても除外してくれません。 (Ver. 1.71)


これらのプロジェクトの設定を後から修正したい場合は [プロジェクトの編集] のメニューを選ぶと同じダイアログが表示されます。





プロジェクトの新規作成後、 [OK] でダイアログを閉じたり、プロジェクトを開くとチェックが始ります。

soft_cppcheck_results.png


チェックの結果はファイルリストのツリー上に表示されます。
[表示] → [ツリーの展開] でまとめて展開できます。

使い方(コマンドライン)

Jenkins や SonarQube など他のツールと連携させたい場合などではコマンドラインを使うこともあります。
こちらは次の形式で実行します。
  $ cppcheck --enable=all ソース [...]
引数としてチェック対象のソースファイルやファイルのあるフォルダーを指定します。 フォルダーの場合は再帰的にチェックします。

GUI の結果をみるとわかりやすいと思いますが、 CppCheck での検査項目はカテゴリー分けされています。 --enable オプションでそのカテゴリーを指定し、 all ですべてのカテゴリーが検査対象となります。
--enable を指定していないと検査項目が何もないことになるので、 とりあえずは all をつけていれば良いと思います。


それ以外のよく使うオプションを次の表にまとめました。

オプション 機能
-h, --help ヘルプの表示
-q, --quiet ログを出さない(解析結果だけ表示)
-I インクルードフォルダーのパスを指定
-D define を指定
-i 除外するファイルやフォルダーの指定
--xml 解析結果の出力を xml 形式にする


CUI だと処理中のログも一緒に出て、見づらいです。
-q を使うと解析結果だけになります。もしくは、解析結果が標準エラー出力(2)に出力されるので、リダイレクト(>)でファイルに落とします。
  $ cppcheck -q --enable=all .
  $ cppcheck    --enable=all . 2> cppcheck_report.txt
-I, -i はそれぞれ GUI の [Includes] 、 [除外する] で指定するものと同じです。 コマンドラインでは除外フォルダーの指定もうまくいきます。
また -I, -D はそれぞれコンパイラーの指定に使うオプションと同じようなものと言えます。
  $ cppcheck -q -I c:\local\include -i examples -i tests --enable=all .

ツールと連携する時はたいてい XML ファイルとして必要です。
--xml のオプションで解析結果を xml 形式にします。 ただ、これだけだと標準エラー出力に出力されるので、リダイレクトでファイルにします。
  $ cppcheck -xml --enable=all . 2> cppcheck_report.xml
スポンサーサイト



 
このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
26位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
8位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

12月 | 2016年01月 | 02月
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。