#Visual Studio2013のトレースポイントについて
Visual Studio2013のデバッガには、ブレークポイントに似た機能としてトレースポイントという機能があります。
トレースポイントは、プログラムの指定したコード行にてトレースを出力するという、所謂「printfデバッグ」を実現する機能となります。
トレースポイントを使用することにより、ソースコードを変更せずにメソッドの引数・戻り値をデバッガに出力させることが可能となります。
トレースポイントで出力するメッセージの仕様
トレースポイントで出力するメッセージは、下記のキーワード及び中括弧記号で変数や式を指定可能となります。
キーワード | 説明 |
---|---|
$ADDRESS | 現在の命令 |
$CALLER | 呼び出し元関数名 |
$CALLSTACK | 呼び出し履歴 |
$FUNCTION | 現在の関数名 |
$PID | プロセスID |
$PNAME | プロセス名 |
$TID | スレッドID |
$TNAME | スレッド名 |
$TICK | CPUのティック数 |
$FILEPOS | 現在のファイルの位置 |
トレースポイントの使用方法
下記のプログラムに対してトレースポイントを使用し、Addメソッドの引数・戻り値をデバッガに出力させます。
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Add(1, 2));
}
static int Add(int lhs, int rhs)
{
var ret = lhs + rhs;
return ret;
}
}
}
- 18行目の「var ret = lhs + rhs;」及び19行目の「return ret;」に対してF9キーでブレークポイントを追加し、「ヒット時」の設定を行います。なお、$CALLSTACKキーワードでは、呼び出し元メソッドの行番号が出力されないため、StackTraceクラスを使用してスタックトレースを出力するようにしています。
名前 | ヒット時に出力するメッセージ |
---|---|
Program.cs、18行13文字 | {System.DateTime.Now.ToString()} [開始] $FUNCTION $TID lhs={lhs} rhs={rhs} {new System.Diagnostics.StackTrace(true).ToString().Replace("\r\n", null)} |
Program.cs、19行13文字 | {System.DateTime.Now.ToString()} [終了] $FUNCTION $TID ret={ret} {new System.Diagnostics.StackTrace(true).ToString().Replace("\r\n", null)} |
- F5キーを押下してプログラムをデバッグ実行し、出力ウィンドウにAddメソッドの引数・戻り値が出力されていることを確認します。
参考資料
ブレークポイントとトレースポイントの使用
https://msdn.microsoft.com/ja-jp/library/5557y8b4.aspx