2015/10/04

[c]静的解析ツールAdLintを試す

仕事では、有料の静的解析ツールでソースを解析している。
が、家でやるとなるとそうもいかない。
買えばいいんだろうけど、ちょっと個人で手を出すのも難しいし、その辺についてはプロジェクト単位で提供してほしいところではある。

あるのだけど、コンパイラでは気付かないバグが残ってしまうのも嫌なので、コンパイラとは別の観点でソースを見てほしいという気持ちは多分にある。
SourceMonitorを調べたのも、多角的にソースを見たいという気持ちからだ。

今回は、AdLintを試すことにする。
オープンソースの静的解析ツール AdLint(アドリント) | オージス総研
公開された当時に試した記憶はあるのだが、当時はC++が主だったので、あまり見てなかった気がする。
nRF51/52はCだし、最近はCばかりなので、見直さねば。


インストール方法は、こちら。
AdLint :: Advanced Lint - インストール方法

たぶん、公開された当時からあまり変わってない。
cygwinで試していたけど、今はもうrubyのバージョンが新しくなってるのでね。
つまり、インストールが楽になったということだ!

image

カレントディレクトリが妙なところになっているが、そこは関係ない。
私はcygtermを使っているので、ちょうど開きたいところがそこだっただけだ。

ともかく、インストールはすぐに終わった。
次はチュートリアルのようだ。
AdLint :: Advanced Lint - AdLint チュートリアル
まずはインストールの確認で、adlintコマンドだけを動かす・・・
・・・あれ、not foundだ。
どこかにいるだろうと探すと、マイドキュメントの下に.gemというフォルダがあり、その下の方にadlintがいた。
で、どうしたらいいのだ?

なんとなく、cygwinのrubyではうまく動かないのでは?という気がしたので、Windowsのrubyをインストールすることにした。


うちはWindows7 64bit。
Windowsのインストーラを使った。
インストールされたRubyコマンドプロンプトと、普通のコマンドプロンプトで確認。

C:\Users\xxx>gem -v
2.4.8

うむうむ。
では、cygwinで確認。

[~]$ gem -v
<internal:gem_prelude>:1:in `require': cannot load such file -- rubygems.rb (LoadError)
        from <internal:gem_prelude>:1:in `<compiled>'

えー。
ネットで検索したが、なんかめんどくさそうなので、AdLintはWindowsで動かすことにしよう。


ふたたびチュートリアルに戻る。

>adlint --version
AdLint all in one analyzer 3.2.14 (2014-05-10)
Written by Yutaka Yanoh and OGIS-RI Co.,Ltd.

よし。
では、サンプルソースをそのまま試すことにする。

>adlintize -o adlint
>cd adlint
>make verbose-all
C:\Winappli\Ruby22\bin\ruby.exe: No such file or directory -- /cygdrive/c/Winapp
li/Ruby22/bin/adlint (LoadError)
GNUmakefile:85: recipe for target 'adlint_verbose-all' failed
make: *** [adlint_verbose-all] Error 1

えー。
c:\Winappliというのは、私がRubyをインストールしたパスだ。
cygwinは関係ないのに・・・と思ったら、PATHにcygwin\binを通していた。
まあ、そうなるねぇ。
面倒だったので、Gnuのmakeをインストールして、再実施。
利用者ガイドを読むと、そう書いてあるので、インストールの説明よりは利用者ガイドを読んだ方がよいかも。


出力されるファイルで見るのは、メッセージが主だろう。
どうせなら統合開発環境で、警告確認と修正を見ながら行いたい。
そこは、出力フォーマットが標準的だから連携できるようだ。

あとは普通のソースで試してみないとわからんな。
警告の抑止や、パスの設定などがいるはずだから。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。