---
# System prepended metadata

title: PyCharm Debugger
tags: [' NCTU', TA, ' Course']

---

---
tags: TA, Course, NCTU
---
# PyCharm Debugger

我們在 debug 程式的時候時常會寫一些測試用程式碼，來輸出一些額外資訊或甚至影響程式流程，以此來輔助我們 debug。但有時候測試的程式碼沒有清掉或是額外輸出沒有拔掉，一方面是影響美觀，另一方面是可能造成 Bug 或安全隱患。

但其實我們如果能妥善運用 debug，在運行時候觀察、調整程式狀況，就不需要這樣子去更改程式本體也可以來 debug。這篇文章就是要介紹如何在 PyCharm 使用 Debugger 來 debug。

## PyCharm 介面介紹

當開啟 PyCharm 時我們會看到這樣子的介面：

![](https://i.imgur.com/SaTTU2v.png)

### 編輯框

畫面上用白色框標註的部分就是編輯框：

![](https://i.imgur.com/UR5iEDn.png)

你會在編輯框當中編輯你的程式。

### 執行

![](https://i.imgur.com/Zbwa25f.png)

當你按下右上角的 Run，程式就會開始執行，並且會在下方的 Console 進行輸入輸出。

### Debugger

![](https://i.imgur.com/OtDzJFV.png)

我們可以按右上角的 Debugger 開始執行程式，同時我們可以利用 Debugger 來幫助 Debug。

## Debugger 功能介紹

在 Debugger 中，我們會設置各個斷點（breakpoint），每當執行到斷點時，程式就會暫停並且我們可以趁機查看程式運行狀況甚至是更改程式狀態。

### 設置斷點

![](https://i.imgur.com/Bc9InWw.png)

我們只需要在要設斷點的那一行行號旁邊點，就可以設置斷點（看到紅色圈圈）。

設置斷點之後，再按右上角 Debugger 開始執行程式，Debugger 會在每個斷點暫停程式，我們就會看到如上圖的介面。

### 變數查看

我們可以在 Debugger 介面看到程式執行到現在的變數狀態：

![](https://i.imgur.com/10Y8VQS.png)

或是如果將斷點設置在第七行，此時就可以很清楚的看到變數 `c` 被宣告前後的過程：

![](https://i.imgur.com/WCreln0.png)

### 查看輸入輸出

我們也可以在切回 Console 介面來看輸入輸出的結果：

![](https://i.imgur.com/CCo5lvd.png)

### 修改變數

我們還可以利用 Debugger 來修改運行中程式變數的值，右鍵要修改的變數：

![](https://i.imgur.com/Swt5WOG.png)

![](https://i.imgur.com/RM3P7Bn.png)

### 斷點後繼續執行

我們可以按左側的 `Resume` 來繼續執行我們的程式：

![](https://i.imgur.com/aOIQWL4.png)

此時我們就可以看到我們修改的值生效了！

![](https://i.imgur.com/Ru4nmpc.png)

### 逐步執行

我們可以按白框框起來的這些按鈕來做到逐步執行，逐步執行就是一行一行的慢慢執行，你可以看程式在每一行的狀態變化：
![](https://i.imgur.com/BB667Im.png)
這幾個按鈕從左到右分別是：
- Step Over：將 function call 視作一步，會直接跳過 function 內做的事情
- Step Into：在 Call Function 時候會進入 Function，一步一步的執行 Function 內的程式碼
- Step Into My Code：和 Step Into 類似，但只針對自己定義的 Function
- Step Out：不斷執行直到離開當前 Function
- Run To Cursor：不斷執行直到碰到 Cursor Line（鼠標所在的行）


## 範例

![](https://i.imgur.com/Fdda3oJ.png)

例如我想計算 $4!$，但我的程式輸出 0，我想利用 Debugger 看哪一步出現問題。

### 設置斷點並開始執行

![](https://i.imgur.com/1AMVoSv.png)

之後便可以發現當 $i := 0$ 時候導致乘以 0：

![](https://i.imgur.com/0O6tgX9.png)

## Demo 影片

[PyCharm Demo 影片](https://youtu.be/9d0Oi2W33FQ)