分享方式:


使用 Visual Studio 中的追蹤點將資訊記錄至 [輸出] 視窗

追蹤點可讓您在不需修改或停止程式碼的情況下,在可設定的條件下將資訊記錄至 [輸出] 視窗。 受控語言 (C#、Visual Basic、F#) 和原生程式碼以及 JavaScript 和 Python 之類的語言,都支援此功能。

注意

如需使用 .NET API 以程式設計方式將資訊記錄至 [輸出] 視窗的詳細資訊,請參閱將訊息傳送至輸出視窗

讓我們以範例來說明

下列範例程式是一個簡單的 for 迴圈,其計數器變數會在每次迴圈執行另一個反覆項目時增加一。

Screenshot of a sample counter program.

下列範例程式是一個簡單的 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;
            }
        }
    }
}

在原始程式碼中設定追蹤點

您可以在 [中斷點設定] 視窗中,指定 [動作] 核取方塊下的輸出字串來設定追蹤點。

  1. 若要初始化追蹤點,請先按一下要設定追蹤點之行號左邊的裝訂邊。

    Screenshot showing the Breakpoint Initialization in the sample code.

  2. 將滑鼠停留在紅色圓圈上,然後按一下齒輪圖示。

  3. 此動作會開啟 [中斷點設定] 視窗。

    Screenshot showing Breakpoint Window.

  4. 選取 [動作] 核取方塊。

    Screenshot of breakpoint window with Actions Box checked.

    請注意紅色圓圈如何變更為菱形,指出您已從中斷點切換到追蹤點。

  5. 將您要記錄的訊息輸入到 [在輸出視窗中顯示訊息] 文字輸入框 (如需詳細資訊,請參閱本文稍後的章節)。

    您的追蹤點現在已設定。 如果您只想將一些資訊記錄到輸出視窗,請點選 [關閉] 按鈕。

  6. 如果您想要新增條件來決定是否顯示訊息,請選取 [條件] 核取方塊。

    Screenshot of breakpoint window with Conditions Box checked.

    您有三種條件選擇:條件運算式篩選以及叫用次數

您可以在 [中斷點設定] 視窗中,指定 [動作] 核取方塊下的輸出字串來設定追蹤點。

  1. 若要初始化追蹤點,請先按一下要設定追蹤點之行號左邊的裝訂邊。

    Screenshot showing the Breakpoint Initialization in the sample code.

  2. 將滑鼠停留在紅色圓圈上,然後按一下齒輪圖示,以開啟 [中斷點設定] 視窗。

    Screenshot showing Breakpoint Window.

  3. 選取 [動作] 核取方塊。

    Screenshot of breakpoint window with Actions Box checked.

    請注意紅色圓圈如何變更為菱形,指出您已從中斷點切換到追蹤點。

  4. 將您要記錄的訊息輸入到 [在輸出視窗中顯示訊息] 文字輸入框 (如需詳細資訊,請參閱本文稍後的章節)。

    您的追蹤點現在已設定。 如果您只想將一些資訊記錄到輸出視窗,請點選 [關閉] 按鈕。

  5. 如果您想要新增條件來決定是否顯示訊息,請選取 [條件] 核取方塊。

    Screenshot of breakpoint window with Conditions Box checked.

    您有三種條件選擇:條件運算式篩選以及叫用次數

動作功能表

此功能表可讓您將訊息記錄至 [輸出] 視窗。 將您想要輸出的字串輸入到訊息方塊中 (不需要引號)。 如果您想要顯示變數的值,請務必以大括弧將其括住。

例如,如果您想要在輸出主控台中顯示 counter 變數的值,請在訊息文字輸入框中輸入 {counter}。

Screenshot showing Counter Output Message.

如果您按一下 [關閉] 然後偵錯程式 (F5),您會在 [輸出] 視窗中看到下列輸出。

Screenshot showing Actions Message In Output Window.

您也可以使用特殊關鍵字來顯示更具體的資訊。 確實如下所示輸入關鍵字 (在每個關鍵字和關鍵字本身的大寫字前面使用 "$")。

關鍵字 顯示的內容
$ADDRESS 目前指令
$CALLER 呼叫函式名稱
$CALLSTACK 呼叫堆疊
$FUNCTION 目前的函式名稱
$PID Process ID
$PNAME 程序名稱。
$TID 執行緒識別碼
$TNAME 執行緒名稱
$TICK 滴答計數 (來自 Windows GetTickCount)

此功能表可讓您將訊息記錄至 [輸出] 視窗。 將您想要輸出的字串輸入到訊息方塊中 (不需要引號)。 如果您想要顯示變數的值,請務必以大括弧將其括住。

例如,如果您想要在輸出主控台中顯示 counter 變數的值,請在訊息文字輸入框中輸入 {counter}

Screenshot showing Counter Output Message.

如果您按一下 [關閉] 然後偵錯程式 (F5),您會在 [輸出] 視窗中看到下列輸出。

Screenshot showing Actions Message In Output Window.

您也可以使用特殊關鍵字來顯示更具體的資訊。 確實如下所示輸入關鍵字 (在每個關鍵字和關鍵字本身的大寫字前面使用 "$")。

關鍵字 顯示的內容
$ADDRESS 目前指令
$CALLER 呼叫函式名稱
$CALLSTACK 呼叫堆疊
$FUNCTION 目前的函式名稱
$PID Process ID
$PNAME 程序名稱。
$TID 執行緒識別碼
$TNAME 執行緒名稱
$TICK 滴答計數 (來自 Windows GetTickCount)

條件功能表

條件可讓您篩選輸出訊息,因此訊息只會在特定案例下顯示。 有三種主要的條件可供您使用。

條件運算式

針對條件運算式,只有在符合特定條件時,才會顯示輸出訊息。

針對條件運算式,您可以在特定條件為 true 或變更時,將追蹤點設定為輸出訊息。 例如,如果您只想在 for 迴圈的反覆項目期間顯示計數器的值,則可以選取 [為 true] 選項,然後在訊息文字輸入框中輸入 i%2 == 0

Screenshot showing Conditional Expression Is True.

如果您想要在 for 迴圈反覆項目變更時列印計數器的值,請選取 [變更時] 選項,然後在訊息文字輸入框中輸入 i

Screenshot showing when Conditional Expression is Changed.

[變更時] 選項的行為,會隨不同的程式設計語言而異。

  • 針對原生程式碼,偵錯工具不會將第一次條件評估視為變更,因此不會在第一次評估時叫用追蹤點。
  • 針對受控程式碼,偵錯工具會在選取 [變更時] 之後,於第一個評估中叫用追蹤點。

如需在設定條件時可以使用的有效運算式,請參閱偵錯工具中的運算式

針對條件運算式,只有在符合特定條件時,才會顯示輸出訊息。

針對條件運算式,您可以在特定條件為 true 或變更時,將追蹤點設定為輸出訊息。 例如,如果您只想在 for 迴圈的反覆項目期間顯示計數器的值,則可以選取 [為 true] 選項,然後在訊息文字輸入框中輸入 i%2 == 0

Screenshot showing Conditional Expression Is True.

如果您想要在 for 迴圈反覆項目變更時列印計數器的值,請選取 [變更時] 選項,然後在訊息文字輸入框中輸入 i

Screenshot showing when Conditional Expression is Changed.

[變更時] 選項的行為,會隨不同的程式設計語言而異。

  • 針對原生程式碼,偵錯工具不會將第一次條件評估視為變更,因此不會在第一次評估時叫用追蹤點。
  • 針對受控程式碼,偵錯工具會在選取 [變更時] 之後,於第一個評估中叫用追蹤點。

您也可以將中斷點插入程式碼的任何特定區段,然後選取 [中斷點設定] 功能表中的 [只有在叫用下列中斷點時啟用:] 核取方塊,來設定啟用追蹤點的條件。 您可以從選項清單中選擇任何中斷點。

Screenshot showing enable when a breakpoint is hit checked.

如需在設定條件時可以使用的有效運算式,請參閱偵錯工具中的運算式

叫用次數

叫用次數條件可讓您只在設定追蹤點的程式碼執行指定的次數之後,才會傳送輸出。

針對叫用次數,您可以選擇在設定追蹤點的程式碼已執行特定次數時輸出訊息。 根據需求,可以等於或為倍數,或者大於或等於指定的叫用次數值。 選擇最符合您需求的選項,並在欄位中輸入整數值 (例如 5),代表感興趣的反覆項目。

Screenshot showing Conditional Expression Hit Count.

叫用次數條件可讓您只在設定追蹤點的程式碼執行指定的次數之後,才會傳送輸出。

針對叫用次數,您可以選擇在設定追蹤點的程式碼已執行特定次數時輸出訊息。 根據需求,可以等於或為倍數,或者大於或等於指定的叫用次數值。 選擇最符合您需求的選項,並在欄位中輸入整數值 (例如 5),代表感興趣的反覆項目。

Screenshot showing Conditional Expression Hit Count.

您也可以藉由啟用 [叫用之後移除中斷點] 核取方塊,來移除第一次叫用的中斷點。

Screenshot showing Remove breakpoint on first hit.

篩選器

針對篩選條件,指定針對哪些裝置、程序或執行緒輸出顯示。

Screenshot showing Conditional Expression Filter.

篩選條件運算式的清單:

  • MachineName = "名稱"
  • ProcessId = 值
  • ProcessName ="名稱"
  • ThreadId = 值
  • ThreadName = "名稱"

以雙引號括住字串 (例如名稱)。 可以不加上引號來輸入值。 您可以使用以下項目來結合子句:& (AND)、|| (OR)、! (NOT) 和括號。

針對篩選條件,指定針對哪些裝置、程序或執行緒輸出顯示。

Screenshot showing Conditional Expression Filter.

篩選條件運算式的清單:

  • MachineName = "name"
  • ProcessId = value
  • ProcessName = "name"
  • ThreadId = value
  • ThreadName = "name"

以雙引號括住字串 (例如名稱)。 可以不加上引號來輸入值。 您可以使用以下項目來結合子句:& (AND)、|| (OR)、! (NOT) 和括號。

考量因素

追蹤點的目的是讓偵錯更簡潔,且有更順暢的體驗。 使用追蹤點時,您應該注意一些考量。

有時候當您檢查物件的屬性 (Property) 或屬性 (Attribute) 時,其值可能會變更。 如果值在檢查期間變更,則不是追蹤點功能本身所造成的錯誤 (bug)。 不過,使用追蹤點來檢查物件並無法避免這些意外的修改。

運算式在 [動作] 訊息方塊中評估的方式可能與您目前用於開發的語言不同。 例如,若要輸出字串,即使您通常使用 Debug.WriteLine()console.log(),也不需要以引號括住訊息。 此外,輸出運算式的大括弧語法 ({ }) 可能也不同於在開發語言中輸出值的慣例。 (不過,大括弧 ({ }) 內的內容仍應使用您的開發語言語法撰寫)。

如果您嘗試偵錯即時應用程式,並尋找類似的功能,請查看快照偵錯工具中的記錄點功能。 快照偵錯工具是用來調查生產應用程式中問題的工具。 記錄點也可讓您將訊息傳送至輸出視窗,而不需要修改原始程式碼,而且不會影響執行中的應用程式。 如需詳細資訊,請參閱偵錯即時 Azure 應用程式