步驟 4:在偵錯工具中執行程式碼
上一個步驟:使用互動式 REPL 視窗
Visual Studio 提供功能來管理專案、豐富的編輯體驗、互動式視窗,以及 Python 程式碼的完整功能偵錯。 在偵錯工具中,您可以逐步執行程式碼 (包含迴圈的每個反覆項目)。 只要符合特定條件,您也可以暫停程式。 在偵錯工具中暫停程式的任何時間點,您都可以檢查整個程式狀態,以及變更變數的值。 這類動作是追蹤程式 Bug 的必要項目,也提供遵循確切程式流程的實用輔助。
將 PythonApplication1.py 檔案中的程式碼取代為下列程式碼。 程式碼的這項差異會展開
make_dot_string
,以在偵錯工具中檢查其離散步驟。 它也會將for
迴圈放在main
函式中,並呼叫該函式來明確執行它:from math import cos, radians # Create a string with spaces proportional to a cosine of x in degrees def make_dot_string(x): rad = radians(x) # cos works with radians numspaces = int(20 * cos(rad) + 20) # scale to 0-40 spaces st = ' ' * numspaces + 'o' # place 'o' after the spaces return st def main(): for i in range(0, 1800, 12): s = make_dot_string(i) print(s) main()
按下 F5,或選取 [偵錯]>[開始偵錯] 功能表命令,檢查程式碼運作是否正常。 此命令會在偵錯工具中執行程式碼。 到目前為止,在程式執行時,沒有做任何動作來暫停程式,它只會列印一些反覆項目的波浪圖樣。 按任意鍵以關閉輸出視窗。
提示
若要在程式完成時自動關閉輸出視窗,請選取 [工具]>[選項] 功能表命令,展開 [Python] 節點,選取 [偵錯],然後清除 [處理序正常結束時等候輸入] 選項:
如需偵錯以及如何設定指令碼和解譯器引數的詳細資訊,請參閱偵錯您的 Python 程式碼。
在
for
陳述式上設定中斷點,方法是按一下該行旁的灰色邊界,或者將插入點放在該行,並使用 [偵錯]>[切換中斷點] 命令 (F9)。 灰色邊界會出現紅點,以指出中斷點 (如下方箭號所註):重新啟動偵錯工具 (F5),您會看到執行中程式碼停在含該中斷點的行。 您可以在這裡檢查呼叫堆疊,並檢查變數。 範圍內的變數在定義時會出現在 [自動變數] 視窗中;您也可以切換至該視窗底部的 [區域變數] 檢視,以顯示 Visual Studio 在目前範圍中找到的所有變數 (包含函式),即使在定義之前也是一樣:
觀察 Visual Studio 視窗頂端的偵錯工具列 (如下所示)。 此工具列可快速存取最常見的偵錯命令 (這也可以在 [偵錯] 功能表上找到):
從左到右的按鈕如下:
Button Command 繼續 (F5) 執行程式直到下一個中斷點或程式完成。 全部中斷 (Ctrl+Alt+Break) 暫停長時間執行的程式。 停止偵錯 (Shift+F5) 停止程式 (不管程式在哪裡),並結束偵錯工具。 重新啟動 (Ctrl+Shift+F5) 停止程式 (不管程式在哪裡),並在偵錯工具中從頭重新啟動它。 顯示下一個陳述式 (Alt+Num*) 切換至要執行的下一行程式碼。 如果您在偵錯工作階段期間巡覽程式碼,而且想要快速回到偵錯工具的暫停點,則這會有幫助。 逐步執行 (F11) 執行下一個程式碼行,進入所呼叫的函式。 逐程序 (F10) 執行下一個程式碼行,而不進入所呼叫的函式。 跳出 (Shift+F11) 執行目前函式的其餘部分,並於呼叫端程式碼中暫停。 使用 [不進入函式],不進入
for
陳述式。 「逐步執行」表示偵錯工具執行目前程式碼行 (包含任何函式呼叫),然後再次立即暫停。 注意在程式碼中,變數i
現在如何於 [區域變數] 和 [自動變數] 視窗中定義。不進入可呼叫
make_dot_string
並暫停的下個程式碼行。 [不進入函式] 這裡特別表示偵錯工具會在傳回時執行整個make_dot_string
並暫停。 除非該處有個別的中斷點,否則偵錯工具不會在該函式內部停止。繼續逐步執行程式碼數次,並觀察 [區域變數] 或 [自動變數] 視窗中的值如何變更。
在 [區域變數] 或 [自動變數] 視窗中,按兩下
i
或s
變數的 [值] 資料行,以編輯值。 按 Enter 或選取該值以外的任何區域,以套用任何變更。使用 [逐步執行],繼續逐步執行程式碼。 [逐步執行] 表示偵錯工具進入具有偵錯資訊的任何函式呼叫 (例如
make_dot_string
)。 位在make_dot_string
內之後,您可以檢查其區域變數,並特別逐步執行其程式碼。繼續逐步執行 [逐步執行],並注意到,當您到達
make_dot_string
結尾時,下個步驟會回到s
變數中具有新傳回值的for
迴圈。 當您再次逐步執行到print
陳述式時,會注意到對print
的 [逐步執行] 不會進入該函式。 原因是print
不是以 Python 撰寫,而是 Python 執行階段內的原生程式碼。繼續使用 [逐步執行],直到您再次到達
make_dot_string
。 然後使用 [跳離函式],並注意到,您回到for
迴圈。 使用 [跳離函式],偵錯工具會執行函式的其餘部分,然後在發出呼叫的程式碼中自動暫停。 當您逐步執行您想要偵錯的冗長函式的某些部分時,這會很有幫助。 它會逐步執行其餘部分,且不會在呼叫端程式碼中設定明確的中斷點。若要繼續執行程式,直到達到下一個中斷點,請使用 [繼續] (F5)。 因為您在
for
迴圈中有中斷點,所以會在下一個反覆項目中斷。逐步執行迴圈中的數百個反覆項目可能十分冗長,因此 Visual Studio 可讓您將「條件」新增至中斷點。 偵錯工具接著只會在符合條件時,將程式暫停於中斷點。 例如,您可以在
for
陳述式上使用含中斷點的條件,讓它只在i
的值超過 1600 時暫停。 若要設定條件,請以滑鼠右鍵按一下中斷點紅點,然後選取 [條件] (Alt+F9>C)。 在出現的 [中斷點設定] 快顯視窗中,輸入i > 1600
作為運算式,然後選取 [關閉]。 按 F5 繼續執行,並觀察程式在下一個中斷之前反覆執行多次。若要執行程式直到完成,請在邊界中的點上按一下滑鼠右鍵並選取 [停用中斷點] (Ctrl+F9) 來停用中斷點。 然後選取 [繼續] (或按 F5) 以 執行程式。 程式結束時,Visual Studio 會停止其偵錯工作階段,並回復為其編輯模式。 您也可以選取其點,或以滑鼠右鍵按一下該點,然後選取 [刪除中斷點] 來刪除中斷點。 它也會刪除您先前設定的任何條件。
提示
在某些情況下 (例如,無法啟動 Python 解譯器本身),輸出視窗只會短暫出現後自動關閉,而不讓您看到任何錯誤訊息。 如果發生這種情況,請以滑鼠右鍵按一下 [方案總管] 中的專案,並選取 [屬性],再選取 [偵錯] 索引標籤,然後將 -i
新增至 [解譯器引數] 欄位。 此引數會導致解譯器在程式完成之後進入互動模式,並在您輸入 Ctrl+Z>Enter 結束之前保持視窗開啟。
後續步驟
深入了解
- 偵錯
- Visual Studio 偵錯提供 Visual Studio 偵錯功能的完整文件。