読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【VS2015】コマンドラインからcl.exeのコード分析(/analyze)を利用する

はじめに

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