Tracepoints を使用すると、コードを変更または停止することなく、構成可能な条件下で情報を出力ウィンドウに記録できます。 この機能は、マネージド言語 (C#、Visual Basic、F#) とネイティブ コード、および JavaScript や Python などの言語の両方でサポートされています。
注
.NET API を使用してプログラムで [出力] ウィンドウに情報を記録する方法については、「 出力ウィンドウにメッセージを送信する」を参照してください。
例を見てみましょう
次のプログラム例は、ループが別のイテレーションを実行するたびに 1 つずつ増加するカウンター変数を持つ単純な for ループです。
using System.Diagnostics;
namespace Tracepoints
{
public class Program
{
public static void Main(string[] args)
{
int counter = 0;
for (int i=0; i<=10; i++)
{
counter +=1;
}
}
}
}
ソース コードでトレースポイントを設定する
トレースポイントを設定するには、[ブレークポイント設定] ウィンドウの [アクション] チェックボックスで出力文字列を指定します。
トレースポイントを初期化するには、まず、トレースポイントを設定する行番号の左側にある余白をクリックします。
赤い円の上にカーソルを合わせ、歯車アイコンをクリックして [ ブレークポイントの設定] ウィンドウを開きます。
[ アクション ] チェック ボックスをオンにします。
ブレークポイントからトレースポイントに切り替えたことを示す赤い円がひし形に変わることがわかります。
[出力ウィンドウ] テキスト ボックスにログインする メッセージを 入力します (詳細については、この記事の後のセクションを参照してください)。
これでトレースポイントが設定されました。 必要な操作が出力ウィンドウに情報を記録する場合は、[閉じる] ボタンをクリックします。
メッセージを表示するかどうかを決定する条件を追加する場合は、[ 条件 ] チェック ボックスをオンにします。
条件には、 条件式、 フィルター、 ヒットカウントの 3 つの選択肢があります。
[アクション] メニュー
このメニューを使用すると、メッセージを出力ウィンドウに記録できます。 メッセージ ボックスに出力する文字列を入力します (引用符は必要ありません)。 変数の値を表示する場合は、中かっこで囲んでください。
たとえば、出力コンソールに counter 変数の値を表示する場合は、メッセージ テキスト ボックスに「 {counter} 」と入力します。
[ 閉じる ] をクリックし、プログラムをデバッグすると (F5)、出力ウィンドウに次の出力が表示されます。
特別なキーワードを使用して、より具体的な情報を表示することもできます。 次のようにキーワードを正確に入力します (各キーワードの前に "$" を使用し、キーワード自体のすべての大文字を使用します)。
| Keyword | 表示される内容 |
|---|---|
$ADDRESS |
現在の命令 |
$CALLER |
関数名の呼び出し |
$CALLSTACK |
呼び出し履歴 |
$FUNCTION |
現在の関数名 |
$PID |
プロセス ID |
$PNAME |
プロセス名 |
$TID |
スレッド ID |
$TNAME |
スレッド名 |
$TICK |
ティック数 (Windows GetTickCount から) |
[条件] メニュー
条件を使用すると、出力メッセージをフィルター処理できるため、特定のシナリオでのみ表示されます。 使用できる条件は、主に 3 種類あります。
条件式
条件式の場合、特定の条件が満たされた場合にのみ出力メッセージが表示されます。
条件式の場合は、特定の条件が true の場合、または変更されたときにメッセージを出力するようにトレースポイントを設定できます。 たとえば、 for ループの反復中にカウンターの値のみを表示する場合 は、[true ] オプションを選択し、メッセージ テキスト ボックスに「 i%2 == 0 」と入力します。
for ループの反復処理が変更されたときにカウンターの値を出力する場合は、[変更時] オプションを選択し、メッセージ テキスト ボックスに「i」と入力します。
[変更時] オプションの動作は、プログラミング言語によって異なります。
- ネイティブ コードの場合、デバッガーは条件の最初の評価を変更と見なさないため、最初の評価でトレースポイントにヒットしません。
- マネージド コードの場合、 変更時 が選択された後、デバッガーは最初の評価でトレースポイントをヒットします。
トレースポイントを有効にできる場合は、コードの特定のセクションにブレークポイントを挿入し、[ブレークポイントの設定] メニューの [ブレークポイントの設定] メニューの [次のブレークポイントにヒットした場合にのみ有効にする] チェック ボックスをオンにして、条件を設定することもできます。 選択肢の一覧から任意のブレークポイントを選択できます。
条件の設定中に使用できる有効な式の詳細については、「 デバッガーの式」を参照してください。
AI のサポートを受ける
Copilot がある場合は、トレースポイントの作成中に AI の支援を受けることができます。 Copilot には、コードに固有の 条件付きブレークポイント と トレースポイント の候補が表示されます。
詳細については、「 Copilot を使用したデバッグ」を参照してください。
ヒット数
ヒット カウント条件を使用すると、トレースポイントが設定されているコード行が指定された回数だけ実行された後にのみ出力を送信できます。
ヒットカウントの場合、トレースポイントが設定されているコード行が特定の回数実行されたときにメッセージを出力することを選択できます。 要件に基づいて、指定されたヒット カウント値と等しいか、または倍数であるか、または指定されたヒット カウント値以上である場合があります。 ニーズに最も適したオプションを選択し、目的のイテレーションを表す整数値をフィールド (5 など) に入力します。
また、最初のヒット時にブレークポイントを削除するには、[ヒット後に ブレークポイントを削除する] チェック ボックスをオンにします。
Filter
フィルター条件の場合は、表示されるデバイス、プロセス、またはスレッドの出力を指定します。
フィルター式の一覧:
-
MachineName= "name" -
ProcessId= value -
ProcessName= "name" -
ThreadId= 値 -
ThreadName= "name"
文字列 (名前など) を二重引用符で囲みます。 値は引用符なしで入力できます。 句は、 & (AND)、 || (OR)、 ! (NOT)、かっこを使用して結合できます。
考慮事項
トレースポイントは、デバッグをよりクリーンでスムーズなエクスペリエンスにすることを目的としています。 使用する場合に注意する必要がある考慮事項がいくつかあります。
オブジェクトのプロパティまたは属性を調べると、その値が変更される場合があります。 検査中に値が変更された場合、トレースポイント機能自体によって発生するバグではありません。 ただし、トレースポイントを使用してオブジェクトを検査しても、これらの誤った変更を回避することはできません。
[アクション] メッセージ ボックスで式を評価する方法は、現在開発に使用している言語とは異なる場合があります。 たとえば、文字列を出力するには、通常 Debug.WriteLine() または console.log()を使用している場合でも、メッセージを引用符で囲む必要はありません。 また、式を出力する中かっこ構文 ({ }) も、開発言語で値を出力する規則とは異なる場合があります。 (ただし、中かっこ ({ }) 内の内容は、開発言語の構文を使用して記述する必要があります。
ライブ アプリケーションをデバッグしようとして、同様の機能を探している場合は、スナップショット デバッガーのログ ポイント機能を確認してください。 スナップショット デバッガーは、運用アプリケーションの問題を調査するために使用されるツールです。 また、Logpoints を使用すると、ソース コードを変更せずに出力ウィンドウにメッセージを送信でき、実行中のアプリケーションには影響しません。 詳細については、「 ライブ Azure アプリケーションのデバッグ」を参照してください。