偵錯基本概念:中斷點
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
![]() |
![]() |
![]() |
![]() |
Standard 版 |
![]() |
![]() |
![]() |
![]() |
Pro/Team 版 |
![]() |
![]() |
![]() |
表格圖例:
![]() |
套用 |
![]() |
不套用 |
![]() |
預設隱藏的命令。 |
中斷點是一個用來通知偵錯工具暫時在某一點停止程式執行的訊號。當執行暫止於中斷點時,程式將處於中斷模式下。進入中斷模式並不會中止或結束程式的執行。隨時都可繼續往下執行。
您可將中斷模式當做暫停。所有項目都會維持,例如函式、變數及物件都會留在記憶體中,不過這些項目的移動和活動則會暫停。在中斷模式下,您可以檢查項目的位置和狀態,以尋找違規或錯誤。您也可以在中斷模式下調整程式。例如,您可以變更變數的數值。您可以移動執行點,以變更繼續往下執行時將會執行到的下個陳述式 (Statement)。在 C++、C# 及 Visual Basic 中,您甚至還可以在中斷模式下,使用名為「編輯後繼續」的強大功能變更程式碼本身。
中斷點可以提供讓您在必要的位置和時間上暫止執行的強大工具。您可讓程式持續執行至叫用中斷點後,再開始進行偵錯,而不是按程式碼行或按指令逐步執行程式碼。這可大幅提升偵錯過程的速度。如果沒有這種功能,根本無法偵錯一個大型程式。
許多程式設計語言都擁有可暫止執行並讓程式進入中斷模式的陳述式或建構。例如,Visual Basic 就具有 Stop 陳述式。中斷點和這些陳述式不同,因為中斷點並非必須加入至程式的實際原始程式碼。您並不會將中斷點陳述式輸入至來源視窗中。您會透過偵錯工具介面要求中斷點,接著偵錯工具就會替您設定這個中斷點。若要在一行中插入中斷點,按一下想要設定中斷點那一行旁邊的灰色邊界。您可以使用全功能的 [中斷點] 視窗,來處理更複雜的中斷點。
中斷點具有的許多優點勝過於像 Visual Basic Stop 陳述式這樣的偵錯建構。不需變更程式的原始程式碼,即可刪除或變更中斷點。因為中斷點並非陳述式,當您建置程式的發行版本 (Release Version) 時,絕不會產生任何額外的程式碼。如果您在程式內使用 Stop 陳述式,則需在建置發行版本前,先手動移除 Stop 陳述式,或使用條件式寫法,如下所示:
#If DEBUG Then
Stop
#End If
如果要暫時停用 Stop 陳述式,您必須先在原始程式碼內找出該陳述式,再將它標記為註解:
' Stop
如果只有一個 Stop 陳述式,並不會造成問題。然而,如果您正在偵錯一個包含許多 Stop 陳述式的大型程式,那麼搜尋所有的陳述式,並將每個都標記為註解,可能非常耗時。透過使用中斷點,您可以在 [中斷點] 視窗內選取,並停用或啟用任何或所有的中斷點。
總之,就使用上的彈性而言,中斷點具有較 Stop 陳述式更大的優勢。Stop 陳述式會在此陳述式所在的原始程式行上中斷執行。您可以在該相同目的之原始行上設定中斷點。或者,您還可以在函式或記憶體位址上設定中斷點,這點是 Stop 陳述式做不到的。除了這些位置中斷點,Visual Studio 偵錯工具還提供僅適用於機器碼的資料中斷點。資料中斷點可設在全域或區域變數上,而非某個程式碼位置上。設定資料中斷點可以在變數的數值變更時中斷執行。
為了提供更大的使用彈性,Visual Studio 偵錯工具還可讓您設定屬性來修改中斷點的行為:
叫用次數 (Hit Count) 可讓您決定要在叫用幾次中斷點之後,才讓偵錯工具中斷執行。根據預設,偵錯工具會在每次叫用中斷點時中斷執行。您可設定一個叫用次數,每隔 2 次、10 次或是 512 次 (任何您選擇的數字) 叫用中斷點時,要求偵錯工具中斷執行。叫用次數是很有用的功能,因為某些錯誤在程式第一次執行某個迴圈 (Loop)、呼叫函式或存取某變數時並不一定會出現。有時候,這種錯誤會等到重複執行到第 100 次或 1000 次時才出現。若要偵錯這類問題,您可以設定一中斷點,並將其叫用次數設成 100 或 1000。
條件是用來決定要叫用或略過中斷點的運算式。當偵錯工具到達中斷點時,它會評估該條件。中斷點必須在該條件成立時,才會被叫用。您可以將條件與位置中斷點一起使用,以便只在某個條件成立時,才中斷於指定位置上。例如,假設您正在偵錯一個銀行業務的程式,對此程式而言,帳戶的餘額一定不能低於零。您可在程式碼的某些位置上設定中斷點,並替每個中斷點附加 balance < 0 這類條件。當您執行程式時,執行只會在餘額低於零時,才在這些位置上中斷。您可以檢查第一個中斷點位置的變數與程式狀態,接著繼續執行到第二個中斷點位置,依此類推。
動作會指定在叫用中斷點時要發生的事情。根據預設,偵錯工具會中斷執行,但是您也可以選擇列印訊息,或是執行 Visual Studio 巨集。如果您選擇列印訊息而非中斷,中斷點就會產生類似 Trace 陳述式的效果。這種使用中斷點的方法稱為追蹤點。
篩選條件提供對中斷點指定處理序或執行緒的方法。
注意事項:
在 [呼叫堆疊] 視窗內設定中斷點,是相當有用的技巧。透過使用 [呼叫堆疊] 視窗,您可在特定的函式呼叫上設定中斷點。當您偵錯遞迴函式 (呼叫本身的函式) 時,這個功能特別有用。如果您在呼叫特定次數之後中斷執行,您可使用 [呼叫堆疊] 視窗,在尚未返回的先前呼叫上設定中斷點。偵錯工具會在離開目前呼叫時碰到該中斷點,並中斷執行。