教學課程:在Visual Studio的調試程式中執行程序代碼
本文介紹教學課程系列中的第 4 步:在 Visual Studio 中使用 Python。
Visual Studio 提供功能來管理專案、豐富的編輯體驗、互動式視窗,以及 Python 程式代碼的完整功能偵錯。 在本教學課程系列的步驟 4 中,您會使用 偵錯工具 逐行執行程式碼,包括迴圈的每次迭代。 在 調試程式中,每當特定條件成立時,您就可以暫停程式。 在程序暫停時的任何時間點,您可以檢查整個程序狀態,並變更變數的值。 這類動作對於追蹤程式 Bug 至關重要,也提供協助以遵循確切的程式流程。
在教學課程的步驟 4 中,您將瞭解如何:
- 在 Visual Studio 中的 調試程式 中執行 Python 程式代碼
- 設定斷點和條件
- 檢查程式狀態和變更變數
- 探索 調試程式 視窗和動作
先決條件
- Python 應用程式專案,其具有 Python 檔案(.py),其中的程式碼是在 步驟 2:撰寫和執行 Python 程式代碼,以及 步驟 3:使用本教學課程的互動式 REPL 視窗 中創建的。
準備 Python 檔案
若要準備偵錯練習,請遵循下列步驟來更新 Python 項目檔,以包含更健全的程式代碼:
在編輯器中開啟 Python 專案檔 (.py)。
以下列程式代碼取代 檔案中的程序代碼。 此版本的程式代碼會展開
make_dot_string
函式,讓您可以在調試程式中檢查其離散步驟。 它會將for
迴圈移至main
函式,並藉由呼叫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()
開始偵錯
現在您已準備好開始在 調試程式中檢查更新的 Python 程式代碼。
選取工具列上的 [偵錯]>[開始偵錯],或使用 F5 鍵盤快捷方式,確認程式代碼正常運作。 這些命令會在 調試程式中執行程序代碼。
調試程式 不會偵測到任何問題,因此程式會順利執行。 輸出視窗隨即開啟,您會看到餘弦波圖案的幾個反覆運算。 按下任意按鍵以關閉輸出視窗。
提示
若要在程式完成時自動關閉輸出視窗,請選取 [工具]>[選項],展開 [Python>偵錯] 索引標籤,然後清除 [進程正常結束時等候輸入] 選項。
使用下列其中一種方法,在
for
循環語句上設定斷點:- 在程式代碼列的左邊界中選取 。
- 以滑鼠右鍵按下程式代碼行,然後選取 [斷點]>[插入斷點]。
- 將插入號放在程式碼行中,然後選取 [偵錯]>[切換斷點](或使用鍵盤快捷鍵 F9)。
斷點會在標示點停止執行程序代碼,以便檢查程序狀態。 每個具有設定斷點的行上會出現一個紅點。
再次啟動 調試程式 (F5)。 程序執行中的程式代碼會停止於具有設定斷點的行上。 您現在可以檢查呼叫堆疊,並檢查執行中程式代碼的這個狀態變數。
Visual Studio 提供許多方法來觀察程式代碼和執行數據,包括下列視窗:
- 呼叫堆疊 顯示程式代碼的函式和方法呼叫歷程記錄。
- 定義範圍內的變數會出現在 [自動] 視窗中。
- [局部變數] 檢視會顯示Visual Studio在目前範圍中尋找的所有變數(包括函式),甚至在程式碼中定義變數之前也一樣。
若要查看可用視窗和動作的完整清單,請選取 [偵錯]>[Windows]。
您可以開啟 除錯程式 視窗,以在遇到斷點時檢視程式狀態:
使用偵錯動作
當 Visual Studio 在斷點停止程式代碼執行時,有數個命令可用來逐步執行程式碼或執行程式碼區塊,然後再中斷一次。 命令可在 Visual Studio 的幾個位置使用,包括 調試程式 工具列、偵錯 功能表、程式代碼編輯器中的滑鼠右鍵操作功能表,以及透過鍵盤快捷方式。
調試程式 工具列位於 Visual Studio 視窗頂端,可讓您快速存取最常見的偵錯命令:
下表摘要說明工具列上從左至右出現的這些命令:
行動 | 捷徑 | 描述 |
---|---|---|
繼續 | F5 | 執行程序代碼,直到您到達下一個斷點或程式完成為止。 |
破壞全部 | Ctrl+Alt+Break | 暫停長時間執行的程式。 |
停止偵錯 | Shift+F5 | 在目前點停止程式,並退出 偵錯器。 |
重新啟動 | Ctrl+Shift+F5 | 在目前點停止程式,並從 調試程式開始重新啟動程式執行,。 |
顯示下一個語句 | Alt+Num+\ | 返回下一個語句,以在程式碼中執行。 此命令可協助您在程式代碼中找出停止 調試程式 的位置。 |
邁入 | F11 | 執行下一個語句並停止。 如果下一個語句是函式的呼叫,則 調試程式 逐步執行函式,並在第一行停止。 |
單步執行 | F10 | 執行下一個語句,包括呼叫函式(執行其所有程序代碼),以及套用任何傳回值。 此命令可讓您輕鬆地略過不需要偵錯的函式。 |
逐步退出 | Shift+F11 | 執行程式代碼直到目前函式的結尾,然後跳到呼叫語句並暫停。 當您不需要偵錯目前函式的其餘部分時,此命令會很有用。 |
請遵循下列步驟,在 Python 程式代碼中使用 調試程式 動作:
使用 逐步執行 動作,跳過
for
迴圈語句。逐步執行 會導致 調試程式 執行目前的程式代碼行,包括任何呼叫的函式,然後立即暫停。 在逐步執行之後,請注意變數
i
現在定義於 局部變數 和 自動變數 視窗中。逐步執行 下一行程式碼,該行會呼叫
make_dot_string
函式。在此實例中,步過 會導致 偵錯工具 執行整個
make_dot_string
函式,並在函式傳回後暫停。 除非有個別的斷點存在,否則 調試程式 不會在函式內停止。繼續逐一執行程式碼數次,並觀察 [局部變數] 或 [自動] 視窗中的值如何變更。
在 [局部變數] 或 [自動] 視窗中,按兩下變數的 [值] 欄來修改該值。 在這裡範例中,將
s
變數的值變更為'Hello, Python Application'
。 請務必以單引弧括住值。 選取 ,輸入,或點擊數值之外的任何區域以套用您的變更。繼續逐步執行程式代碼,方法是使用 逐步執行,直到呼叫
make_dot_string
函式為止。針對函式,步入 會導致 除錯器 既呼叫函式,也步入函式代碼。 當除錯過程在函式內部時,您可以檢查其局部變數,並逐一執行其程式碼。 在此範例中,步入 動作會移至
make_dot_string
函式。繼續執行 ,進入,直到從
make_dot_string
函式傳回為止。當您到達
make_dot_string
函式程式代碼的結尾時,下一個步驟會將 *調試程式 傳回for
迴圈,並在s
變數中使用新的傳回值。當您再次執行至
print
語句時,請注意,print
語句上的 執行進入 動作不會進入該函式。 此行為是因為print
函式並未以 Python 撰寫。 它是 Python 執行環境內的原生碼。繼續使用 逐步執行,直到再次進入
make_dot_string
函式,然後使用 逐步返回,並注意到 調試程式 會返回for
迴圈。使用 Step Out時,調試程式 會執行函式的其餘部分,然後在呼叫的程式代碼中自動暫停。 當您逐步執行冗長的函式的某些部分,並想要結束對函式的觀察之後,此動作會很有幫助。 步出 步過其餘程式碼,或直到到達呼叫代碼中設定的明確斷點為止。
繼續執行程式,直到使用 Continue 到達下一個斷點為止(F5)。 由於您在
for
循環中設置了斷點,因此您會在下一次迴圈中中斷。您可以觀察 [[ 局部變數] 視窗中
s
變數的變更值,以確認程式正在繼續執行。
使用斷點條件
逐步執行循環中的數百次迭代可能會很繁瑣,因此 Visual Studio 允許您將 條件新增至斷點。 當您設定斷點條件時,調試程式 只有在符合條件時,才會在斷點暫停程式。
下列步驟示範如何在 for
迴圈語句上定義斷點條件,讓 調試程式 只在 i
變數的值超過 1600 時暫停:
若要設定斷點條件,請以滑鼠右鍵按兩下紅色斷點點,然後選取 [條件] 或使用鍵盤快捷方式 Alt+F9>C。
在 [斷點設定 彈出視窗] 中,配置下列項目以建立 條件:
將條件類型設定為 條件表示式。
定義條件評估,當 為真時。
輸入
i > 1600
做為條件值。選取 關閉。
選取 F5 以繼續偵錯和程序執行。 請注意程式在到達條件斷點之前會執行多次迭代。
您可以確認 調試程式 到達條件斷點時,正確地暫停程序執行。 符合條件時,[局部變數] 視窗會將
i
變數值顯示為1608
。若要讓程式完整執行,您可以停用斷點並繼續程式的執行。
將滑鼠停留在紅點上,然後選取 [停用],或以滑鼠右鍵點選紅點,然後選取 [停用斷點]。
選取 繼續(或按 F5)來執行程式。
程序結束時,Visual Studio 會停止偵錯會話,並返回編輯模式。
您也可以刪除斷點。 選取紅點或以滑鼠右鍵按下該點,然後選取 刪除斷點。 此動作也會刪除任何已定義的條件。
提示
在某些情況下,例如無法啟動 Python 解釋器本身時,Python 輸出視窗可能會在程式執行完畢後立刻關閉,而不會暫停或顯示「按任意鍵以繼續」提示。 若要強制暫停並提示,請將 -i
自變數新增 至 [偵錯] 索引標籤上的 [執行>解釋器自變數] 欄位。這個自變數會在程式代碼執行之後,讓 Python 解釋器進入互動式模式。 程式會等候您選取 ctrl+Z+Enter 來關閉視窗。