共用方式為


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

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

備註

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

我們舉個例子

下列範例程式是一個簡單的 for 迴圈,具有計數器變數,每次迴圈執行另一個迭代時,該變數都會增加一個。

範例計數器程式的螢幕擷取畫面。

下列範例程式是一個簡單的 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. 若要初始化追蹤點,請先按一下要設定追蹤點的行號左側的裝訂線。

    螢幕擷取畫面顯示範例程式碼中的中斷點初始化。

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

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

    顯示斷點視窗的螢幕擷取畫面。

  4. 選取 動作 核取方塊。

    已勾選 [動作方塊] 的中斷點視窗螢幕擷取畫面。

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

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

    您的追蹤點現已設定。 如果您只想將一些信息記錄到輸出窗口,請點擊“關閉”按鈕。

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

    選中條件框的斷點窗口的屏幕截圖。

    您有三個條件選擇:「 條件運算式」、「 篩選器」「命中計數」。

您可以在「岔斷點設定」視窗的「動作」勾選框下指定輸出字串,以設定追蹤點。

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

    螢幕擷取畫面顯示範例程式碼中的中斷點初始化。

  2. 將鼠標懸停在紅色圓圈上,然後單擊齒輪圖標以打開 “斷點設置” 窗口。

    顯示斷點視窗的螢幕擷取畫面。

  3. 選取 動作 核取方塊。

    已勾選 [動作方塊] 的中斷點視窗螢幕擷取畫面。

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

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

    您的追蹤點現已設定。 如果您只想將一些信息記錄到輸出窗口,請點擊“關閉”按鈕。

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

    選中條件框的斷點窗口的屏幕截圖。

    您有三個條件選擇:「 條件運算式」、「 篩選器」「命中計數」。

動作功能表

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

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

顯示計數器輸出消息的屏幕截圖。

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

顯示輸出窗口中的操作消息的屏幕截圖。

您也可以使用特殊關鍵字來顯示更具體的資訊。 完全按照下圖輸入關鍵字(在每個關鍵字前面使用“$”,關鍵字本身全部大寫)。

Keyword 顯示的內容
$ADDRESS 當前指令
$CALLER 呼叫函數名稱
$CALLSTACK 呼叫堆疊
$FUNCTION 目前功能名稱
$PID 程序識別碼
$PNAME 程序名稱
$TID 執行緒識別碼
$TNAME 線程名稱
$TICK 刻度計數 (來自 Windows GetTickCount)

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

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

顯示計數器輸出消息的屏幕截圖。

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

顯示輸出窗口中的操作消息的屏幕截圖。

您也可以使用特殊關鍵字來顯示更具體的資訊。 完全按照下圖輸入關鍵字(在每個關鍵字前面使用“$”,關鍵字本身全部大寫)。

Keyword 顯示的內容
$ADDRESS 當前指令
$CALLER 呼叫函數名稱
$CALLSTACK 呼叫堆疊
$FUNCTION 目前功能名稱
$PID 程序識別碼
$PNAME 程序名稱
$TID 執行緒識別碼
$TNAME 線程名稱
$TICK 刻度計數 (來自 Windows GetTickCount)

條件選單

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

條件運算式

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

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

顯示條件表達式為 True 的屏幕截圖。

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

顯示條件表達式何時更改的屏幕截圖。

變更 選項的行為對於不同的程式設計語言會有所不同。

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

您也可以將「中斷點」插入程式碼的任何特定區段,然後選取「中斷點設定」功能表中的「僅在命中下列中斷點時啟用:」選項,以設定啟用追蹤點的條件。 您可以從選項清單中選擇任何岔斷點。

螢幕擷取畫面顯示在命中中斷點時啟用 已勾選。

如需更全面地瞭解您在設定條件時可以使用的有效運算式,請參閱 偵錯工具中的運算式

獲得 AI 協助

如果您有 Copilot,您可以在建立追蹤點時獲得 AI 協助。 Copilot 會針對特定於您的程式碼的 條件中斷點追蹤點 提供建議。

Copilot 處理條件斷點建議的螢幕擷取畫面。

如需詳細資訊,請參閱 使用 Copilot 偵錯

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

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

顯示條件表達式為 True 的屏幕截圖。

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

顯示條件表達式何時更改的屏幕截圖。

變更 選項的行為對於不同的程式設計語言會有所不同。

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

如需更全面地瞭解您在設定條件時可以使用的有效運算式,請參閱 偵錯工具中的運算式

點擊計數

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

對於點擊計數,您可以選擇在設定追蹤點的程式碼行已執行特定次數時輸出訊息。 根據需求,它可以等於指定的點擊計數值,或是指定的點擊計數值的倍數,或大於或等於指定的點擊計數值。 選擇最適合您需求的選項,並在欄位中輸入代表該感興趣的疊代的整數值 (例如 5)。

顯示條件式命中計數的螢幕擷取畫面。

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

對於點擊計數,您可以選擇在設定追蹤點的程式碼行已執行特定次數時輸出訊息。 根據需求,它可以等於指定的點擊計數值,或是指定的點擊計數值的倍數,或大於或等於指定的點擊計數值。 選擇最適合您需求的選項,並在欄位中輸入代表該感興趣的疊代的整數值 (例如 5)。

顯示條件式命中計數的螢幕擷取畫面。

您也可以啟用核取方塊 [ 刪除中斷點 once 命中] 來移除第一個點擊時的中斷點。

螢幕擷取畫面顯示 [在第一次點擊時移除中斷點]。

Filter

對於過濾器條件,請指定顯示哪些裝置、處理程序或執行緒輸出。

顯示條件式篩選器的螢幕擷取畫面。

篩選運算式清單:

  • MachineName = “名稱”
  • ProcessId = 值
  • ProcessName = “名稱”
  • ThreadId = 值
  • ThreadName = “名稱”

將字串 (例如名稱) 括在雙引號中。 可以輸入不帶引號的值。 您可以使用 (AND)、 ||OR)、 !NOT) 和括號組合&子句。

對於過濾器條件,請指定顯示哪些裝置、處理程序或執行緒輸出。

顯示條件式篩選器的螢幕擷取畫面。

篩選運算式清單:

  • MachineName = “名稱”
  • ProcessId = 值
  • ProcessName = “名稱”
  • ThreadId = 值
  • ThreadName = “名稱”

將字串 (例如名稱) 括在雙引號中。 可以輸入不帶引號的值。 您可以使用 (AND)、 ||OR)、 !NOT) 和括號組合&子句。

考慮事項

而追蹤點旨在讓偵錯體驗更乾淨、更流暢。 在使用它們時,您應該注意一些注意事項。

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

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

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