在 C# 中設定條件式中斷點
Visual Studio Code 的 C# 偵錯工具支援一個選項,可以設定只有在符合條件時才會觸發的斷點。 這種類型的斷點稱為條件斷點。 您可以直接設定條件斷點,或編輯現有的斷點。
備註
Visual Studio Code 也支援條件式中斷點,其會根據「叫用」中斷點的次數觸發。
假設您正在除錯一個處理產品資訊的多維字串陣列的應用程式。 該陣列包含數千個數據點。 您正在偵錯的問題似乎發生在標示為 new的產品。 您的程式代碼會在 for 迴圈內處理陣列。 您需要在迴圈內設定中斷點,但只有在產品為 new 時才想要暫停。
使用標準斷點來檢查資料處理應用程式
使用下列程式代碼取代Program.cs檔案的內容:
int productCount = 2000; string[,] products = new string[productCount, 2]; LoadProducts(products, productCount); for (int i = 0; i < productCount; i++) { string result; result = Process1(products, i); if (result != "obsolete") { result = Process2(products, i); } } bool pauseCode = true; while (pauseCode == true) ;此程式代碼會使用名為
LoadProducts的方法將數據載入products數位列。 載入數據之後,程式代碼會逐一查看陣列,並呼叫名為Process1和Process2的方法。若要產生模擬程序的數據,請將下列方法新增至Program.cs檔案的結尾:
static void LoadProducts(string[,] products, int productCount) { Random rand = new Random(); for (int i = 0; i < productCount; i++) { int num1 = rand.Next(1, 10000) + 10000; int num2 = rand.Next(1, 101); string prodID = num1.ToString(); if (num2 < 91) { products[i, 1] = "existing"; } else if (num2 == 91) { products[i, 1] = "new"; prodID = prodID + "-n"; } else { products[i, 1] = "obsolete"; prodID = prodID + "-0"; } products[i, 0] = prodID; } }方法
LoadProducts會產生 2000 個隨機產品識別碼,並將existing、new或obsolete的值指派給產品描述欄位。 大約有 1% 產品標示new的機會。若要模擬數據處理,請將下列方法新增至Program.cs檔案的結尾:
static string Process1(string[,] products, int item) { Console.WriteLine($"Process1 message - working on {products[item, 1]} product"); return products[item, 1]; } static string Process2(string[,] products, int item) { Console.WriteLine($"Process2 message - working on product ID #: {products[item, 0]}"); if (products[item, 1] == "new") Process3(products, item); return "continue"; } static void Process3(string[,] products, int item) { Console.WriteLine($"Process3 message - processing product information for 'new' product"); }Process1和Process2方法會顯示進度訊息並傳回字串。請注意,當產品為
new時,Process2方法會呼叫Process3。在 [Visual Studio Code 檔案] 功能表上,選取 [儲存]。
在Program.cs檔案頂端附近,在下列程式代碼行上設定斷點:
result = Process1(products, i);開啟 [執行和偵錯] 檢視,然後選取 [ 開始偵錯]。
使用逐步執行來瀏覽
Process1和Process2的程式碼。請注意 RUN AND DEBUG 檢視之 VARIABLES 和 CALL STACK 區段的更新。
繼續使用逐步執行來瀏覽程式碼,直到您看到
i等於 3 為止。RUN AND DEBUG 檢視的 VARIABLES 區段會顯示指派給
i的值。請注意,
Process1和Process2顯示訊息至 [偵錯控制台] 面板。 實際應用程式可能需要使用者互動,因為正在處理數據。 某些互動可能相依於正在處理的數據。使用 [ 停止] 按鈕停止程式代碼執行。
使用表達式設定條件斷點
標準斷點非常適合逐步執行數據處理應用程式。 不過,在此案例中,您感興趣的是 new 產品,而不想逐一分析每個產品以找出屬於 new 的產品。 此案例是應該使用條件斷點時的良好範例。
以滑鼠右鍵按兩下現有的斷點,然後選取 [編輯斷點]。
輸入下列表示式:
products[i,1] == "new";請注意,當您按下 Enter 之後,表達式就不會再顯示。
若要暫時顯示表達式,請將滑鼠指標暫留在斷點上(紅點)。
若要執行已設定條件斷點的應用程式,請選取 [開始調試]。
等候應用程式在條件斷點暫停。
請注意 [變數] 區段底下所顯示的 值
i。在 [ 偵錯控件] 工具列上,選取 [ 繼續]
請注意,
i的值已更新至變數區段。選取 [逐步執行]。
繼續選取 [逐步執行],直到
Process1訊息顯示為止。請注意,
Process1表示正在開發 新產品。花點時間考慮條件斷點所提供的優勢。
在此模擬資料處理案例中,產品有大約 1% 的機會是
new。 如果您使用標準中斷點來偵錯問題,則不需要逐步瀏覽大約 100 個產品的分析,以尋找您感興趣的其中一個new產品。條件式斷點可在偵錯應用程式時節省您很多時間。
使用 [ 停止] 按鈕停止程式代碼執行。
祝賀! 您已成功設定條件斷點。
回顧
以下是本單元中要記住的兩個重要事項:
- 使用標準斷點在每次遇到斷點時暫停應用程式。
- 當布爾表達式評估為
true時,使用條件斷點暫停應用程式。