2013年2月22日金曜日

[Visual Studio]コードを修正せずに変数の値をログ出力する方法

ふとした時に変数の値がどのようになっているか、確認したいことってありますよね。

おそらく皆さんブレークポイントを設置して、
停止した状態でローカルウィンドウやウォッチウィンドウを見て確認するのではないでしょうか。


だけど、止めずに確認したい時もありませんか?
一時的な値ではなく変化を知りたい時はありませんか?

そんな時は printf 追加してプリントデバッグ!
という方法もありますが、再ビルドが必要なので時間がかかってメンドクサイです。

そこで、Visual Studio でソースを変更せずブレークポイントで停止させることもなく(※)、変数の値を出力させる方法を紹介します。(※ 内部的には停止している)

サンプルプログラム
int factorial(int n)
{
    if( n == 0 ) return 1;
    n = n * factorial(n-1);
    return n;
}
int main(int, char**)
{
    return factorial(10);
}
今回はこのコードの
return n;
のとこでの変数 n の値を出力します。

設定
まずは、ブレークポイントを設置します。

次に、ブレークポイントの赤いマークを右クリックすると、
コンテキストメニューに「ヒット時(W)...」メニューがでるので選択します。


クリックするとダイアログが出るので、そちらの「メッセージを表示する(P)」にチェックを入れます。
下のエディットボックスに、ブレークポイントにヒットしたときに出力する文字列を入力します。


こちらには、通常の文字列以外に
{x}式評価(中括弧の中に式)
$ADDRESS現在の命令アドレス
$CALLER呼び出し元関数名
$CALLSTACK呼び出し履歴
$FUNCTION現在の関数名
$PIDプロセスID
$PNAMEプロセス名
$TIDスレッドID
$TNAMEスレッド名
が使用できるようです。

今回は変数 n の値が知りたいので、
{n}
と入力しました。

「続けて実行する(C)」にはチェックを入れておいてください。
これにチェックを入れておくと、ブレークポイントにヒットしても停止せずそのまま継続してくれます。

設定は以上です。
実行した結果がこちらになります。


ブレークポイントには他にも色々設定できるので試してみてください。
それでは!


0 件のコメント:

コメントを投稿