はじめに
Visual Studioのコード分析機能を使って、ソースコードの静的解析を行うことができます。
GUIから実行すると複数のソースコードを一度に分析にかけずらいので、コマンドラインから実行できないかと考えました。
環境
- Windows 8.1 Ent(32bit)
- Visual Studio Community 2015
Visual Studioの入手
以下のページから無料で利用できるVisual Studio Community 2015をダウンロードできます。
Downloads | Visual Studio
コマンドラインからコード分析を利用する
以下のようなバッチファイルを用意します。
PATH=の部分は、cl.exeを呼び出せるように環境変数を一時的に追加してパスを通しています。
INCLUDE=の部分は、コンパイルするためにヘッダーファイルのパスを通しています。
@echo off @set PATH=C:\Program Files\Microsoft Visual Studio 14.0\VC\BIN;%PATH% @set INCLUDE=C:\Program Files\Microsoft Visual Studio 14.0\VC\include;C:\Program Files\Windows Kits\8.1\Include\shared;C:\Program Files\Windows Kits\10\Include\10.0.10150.0\ucrt;%INCLUDE% @set LIB=C:\Program Files\Microsoft Visual Studio 14.0\VC\lib;%LIB% @set LIBPATH=C:\Program Files\Microsoft Visual Studio 14.0\VC\lib;%LIBPATH% cl.exe /analyze:only "C:\Users\replication\Documents\Visual Studio 2015\Projects\HelloWorldApp\*.cpp"
cl.exe /analyzeオプションをつけて、cppファイルを指定します。
アスタリスク(*)を指定することで、フォルダ配下すべてのcppファイルを対象にすることができます。
サンプルコード(HelloWorldApp.cpp)
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { char tmp[5]; memcpy(tmp, "HelloWorld!", sizeof("HelloWorld!")); return 0; }
上記のコードをコンパイルすると、解析結果がコンソールに出力されます。
HelloWorldApp.cpp
c:\users\replication\documents\visual studio 2015\projects\helloworldapp\helloworldapp.cpp(7) : warning C6386: 'tmp' への書き込み中にバッファー オーバーランが発生しました: 書き込み可能なサイズは '5' バイトですが、'12' バイトを書き込む可能性があります。: Lines: 6, 7
stdafx.cpp
リダイレクトでテキストファイルに出力
以下のような感じで、cl.exeの結果をリダイレクトすることでテキストファイルにコード分析結果を一気に出力することができます。
cl.exe /analyze:only "C:\Users\replication\Documents\Visual Studio 2015\Projects\HelloWorldApp\*.cpp" > result.txt