VisualStudio

初級者向けVisualStudio便利機能集Vol.2(デバッグ編)

More than 3 years have passed since last update.

前回:初級者向けVisualStudio便利機能集Vol.1

1記事にまとめると見づらくなるので2回位にわけますの2回目。

今回はデバッグで使うコマンドを重点的に攻めます。


ビルド関係


ビルド/リビルド/クリーン

全て[ビルド]から。

クリーンはビルドで出てきた中間ファイルを削除、リビルドは中間ファイルを削除した後もう一度ビルドし直す機能。

プログラムが合ってるのに何故か動かない場合などはここが原因の場合もあるので試しにリビルドしてみるのも手かもしれないです。


実行

F5 : デバッグ実行

Ctrl+F5 : デバッグなしで実行

F5で実行するとブレークポイントなどのデバッグ機能が使用できます。

Ctrl+F5実行では通過しないので使いたいときにはF5実行で。

ビルドの仕方はDebugビルドじゃないといけませんが。


バッチビルド

[ビルド]→[バッチビルド]

複数のプロジェクト、Debug/Releaseをまとめてビルドできます。


ビルドの中止

Ctrl+Break(pause) : ビルドのキャンセル

その名の通り今実行しているビルドをキャンセルします。

Breakキーは人によって違うかもしれないのでそこは見つけてください。

ビルド命令出したけどケアレスミス見つけた!等の場合に使えるかも?


デバッグ実行(F5)関係

デバッグ実行によるプログラムの一時停止中は変数の値の確認、値の変更、関数呼び出し順の確認など様々なことが行えます。

使いこなすことでバグ探しや正常動作の確認が非常にやりやすくなるので知らない人は是非覚えましょう。


ステップイン/ステップオーバー/ステップアウト

F11 : ステップイン

F10 : ステップオーバー

Shift+F11 : ステップアウト

Ctrl+F10 : カーソル行の手前まで実行

特定の分だけ処理を実行してそこで停止させます。

ステップインは次の行まで、ステップオーバーは関数を実行して次の関数の呼び出しまで、ステップアウトは現在の関数が終わって呼び出し側に戻るまで実行して停止させます。

カーソル行の手前まで実行は文字通り現在選択中の行の手前までを実行して一時停止させます。


デバッグ中止

Shift + F5 : デバッグ実行の中止

デバッグ実行で停止中のプログラムを中止します。


ブレークポイント

特定の位置で処理を停止します。

dfg.PNG

このように行の左側の薄灰色の部分(デザインによって変わると思いますが)をクリックすると赤い丸が付きます。

この状態でデバッグ(F5)実行するとこの処理に到達した時にプログラムが一時停止します。

一時停止中は停止箇所に右矢印がでます。

sdfsd.png

上記ステップインやブレークポイントでの一時停止中は主に次のことが行えます。

・変数の値確認:マウスオーバー、ローカルウインドウ、ウォッチウィンドウ(後述)を利用してプログラムのその時点での値の確認が行えます。

・関数呼び出し履歴:呼び出し履歴ウインドウでその関数がどういう順で呼ばれているか調べられます

yobidasi.PNG


条件付きブレークポイント

ブレークポイントのついている行の赤い丸を右クリックすると「条件」からブレークポイントの通過条件を指定できます。

条件にはその時点で使われている変数の名前が使えます。

b.png


ヒットカウント

条件付きブレークポイントの亜種みたいなものですが、ブレークポイントを何回か通過した時のみ停止したい、といった場合に使えるようです。


データブレークポイント

つい最近知ったのですが「変数の値が変更されたら中断する」というブレークポイントが作れるみたいです。

http://www.platinumgames.co.jp/programmer_blog/?p=165


ローカルウインドウ、ウォッチウィンドウ

デバッグ実行一時停止中に[デバッグ]→[ウインドウ]から。

両方共変数の値を確認するサブウインドウです。

ローカルはそのスコープでの変数が表示されます。

local.PNG

ウォッチウィンドウは最初は何もないですが、自分で変数の名前や取得関数の名前を入力してEnterを押すことで、その変数が存在していれば表示してくれます。

ローカルやマウスオーバーで表示されないポインタ渡しの配列などもこちらで直接入れると見れます。

f.PNG

変数名を選択してウォッチウインドウにD&Dで持って行くと追加されるようです。

データブレークポイント情報にも使えかなり便利なので覚えておくといいかもしれないです。


呼び出し履歴ウインドウ

デバッグ実行一時停止中に[デバッグ]→[ウインドウ]から。

関数が呼び出された順番を表示します。

yobidasi.PNG


出力ウインドウ

いつもはエラーや警告を表示してるあのウインドウです。

デバッグ実行中もいろいろと表示しています。

自分でもここに文字列を表示することが出来ます。

windows.hがincludeされていればOutputDebugStringという関数が使えるはずなので、

この関数で表示したい文字を渡してあげれば出力ウインドウの文字を表示することが出来ます。


プリプロセッサ処理

VisualStudioのpragmaプリプロセッサ構文です。


pragma once

皆大好き(多分)インクルードガード。

ヘッダーに書いておくと2回以上重複して読み込まれることがなくなります。


pragma warning

下に表示される警告を無視したりエラーレベルに引き上げたりする命令

pragma warning( disable : 4996 ) : 警告を無視(表示しない

pragma warning( error : 4996 ) : 警告をエラーに引き上げ(コンパイルエラーになる

(4996は警告番号。もっとも、この番号はVS2013だとエラーになってるようですが)

(ちなみにこの番号、printf→printf_sのようなセキュリティの警告です)


pragma intrinsic

pragma intrinsic (pow,sqrt,sin,cos,atan2,exp) のように記述。

最適化に関わる機能らしいです。

指定した関数に対し、標準関数ではなく組み込み関数を使用してプログラムの動作を高速化させるとのこと。


おまけ


コードの変更を適用してデバッグ

デバッグで一時停止中にコードを変更してその部分だけまたコンパイルしなおしてそのまま動かすということが出来たはずだと思ってたのですが、やっぱりできるようで。

[ツール]→[オプション]→[デバッグ]→[エディットコンティニュ]からエディットコンティニュを有効及びネイティブのエディットコンティニュを有効にする

でとりあえず出来るようです。

停止中のソースコードを書き換えてF5実行すると変更が適用されます。


メモリリークの検出

VS本体の機能とは関係無いですが一応。

VSにはcrtdbg.hというのがあるのですが、これをインクルードして関数を呼ぶとメモリリークを検出できます。

具体的には終了時にメモリリークしていればdetected~~といった形でリーク領域が出力ウインドウに表示されます。


crt.cpp

#include<crtdbg.h>


//メイン関数最初などで以下の関数を呼ぶとメモリリークをチェックしてくれる
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);