Linux 黑乎乎的命令列下,如何除錯 Python?

不正經程式設計師發表於2019-01-10

Linux 黑乎乎的命令列下,如何除錯 Python?

一般開發者都是在 IDE 中進行程式的除錯,當然,有 IDE 的話,當然首選 IDE 進行除錯。

但是,有時我們的業務場景,限制只能在 Linux 命令列模式進行除錯。

這時該怎麼辦呢?

今天,就給大家介紹一個 Linux 下除錯 Python 程式的工具。

pdb簡介

pdb 偵錯程式是 Python 標準庫提供的,因此最為方便,不需要安裝其他元件,直接 import 後就能使用。

pdb 偵錯程式提供了除錯所需的大多數功能,如斷點、單行步進、堆疊幀的檢查等等。

常用引數

# 檢視執行到哪行程式碼 
# 單步執行,跳過函式 
# 單步執行,可進入函式 
p 變數 # 檢視變數值 
b 行號 # 斷點設定到第幾行 
# 顯示所有斷點列表 
cl 斷點號 # 刪除某個斷點 
cl # 刪除所有斷點 
# 跳到下一個斷點 
# return 當前函式 
exit # 退出


使用示例

本文 Python 環境:Python 3.5.2

我們先準備一小段演示程式:

# -*- coding: utf-8 -*-

def add(a, b):
    return a + b

if __name__ == '__main__':
    print("===start===")
    c = add(13)
    print("===end===")

使用方法 1

執行 pdb 的最簡單方法是從命令列,將程式作為引數傳遞來除錯。

$ python -m pdb test_pdb.py

這時,就開始單步執行了。

Linux 黑乎乎的命令列下,如何除錯 Python?

這種方法對程式碼沒有侵入性,但是每次都需要設定斷點。

使用方法 2

在程式碼頭部引入 pdb,然後可以在程式碼裡,透過 pdb.set_trace() 來設定斷點:

# -*- coding: utf-8 -*-
import pdb

def add(a, b):
    pdb.set_trace()
    return a + b

if __name__ == '__main__':
        print("===start===")
        pdb.set_trace()
        c = add(13)
        print("===end===")

此時,執行程式,就會自動跳轉到設定的斷點處:

Linux 黑乎乎的命令列下,如何除錯 Python?

總結

沒了圖形化頁面,除錯只能這麼來了,不過還好,pdb 使用看著不難吧。

其實還有一些增強的偵錯程式,比如 IPython 的 ipdb 和 pdb++,它們一般都提供了更好的使用者體驗,新增了有用的額外功能,例如語法突出高亮、更好的回溯和自省。

後面有機會再給大家分享吧!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559358/viewspace-2375379/,如需轉載,請註明出處,否則將追究法律責任。

相關文章