Python調試工具


1. 日志

通過日志或者print來打印變量。必要時可以打印locals()globals()

建議使用logging.debug()來代替print,這樣到了正式環境,就可以統一刪除這些日志。

2.trace

Python有個trace模式,可以打印整個程序的執行流

# encoding=utf8
def f():
    print 'aa'


if __name__ == '__main__':
    f()

例如這段簡單的程序,執行python -mtrace --trace test.py就會輸出下面的日志:

 --- modulename: test, funcname: <module>   # test模塊,module級函數
test.py(2): def f():   #test.py的第2行,執行def f命令定義函數
test.py(6): if __name__ == '__main__':
test.py(7):     f()
 --- modulename: test, funcname: f
test.py(3):     print 'aa'
aa
 --- modulename: trace, funcname: _unsettrace
trace.py(80):         sys.settrace(None)

可以詳細得看到這代代碼在Python中的執行流程。

當代碼比較復雜,例如調用了一些第三方庫,這個trace日志就會非常多,所以最好重定向到一個文件里面,慢慢分析。

3.PDB

# encoding=utf8
import pdb
def f2():
    a = 1
    pdb.set_trace()  # 設置斷點
    b = 2
    c = a + b
    pdb.set_trace()


if __name__ == '__main__':
    f2()

在代碼里面設置斷點。執行代碼python -mpdb test.py,就可以調試程序了。進程會在斷點處暫停運行,等待我們執行命令

(vsing_env) [root@www script]# python -mpdb  test.py              
> /data/selfmoe_backend/script/test.py(2)<module>()
-> import pdb
(Pdb) c  
> /data/selfmoe_backend/script/test.py(13)f2()
-> b=2
(Pdb) p a
1
(Pdb) l
  8         cli=redis.Redis(host='127.0.0.1',port='6801')
  9         cli.get('test')
 10     def f2():
 11         a=1
 12         pdb.set_trace()
 13  ->     b=2
 14         c=a+b
 15         pdb.set_trace()
 16     if __name__ == '__main__':
 17         f2()
[EOF]

斷點處可以執行的命令有:

  • c continue 繼續
  • q quit 退出
  • l list 顯示斷點前后的源碼
  • w or where 回溯執行到當前斷點的過程
  • d down 回溯的下一頁
  • u up 回溯的上一頁
  • 回車 重復最后一個命令,例如就不用一直按c,可以只按回車

其他分支

  • ipdb pdb的基礎上增加顏色,自動補齊
  • pudb gui版本
  • winpdb 遠程調試,在windows調試linux的進程

上面幾個庫的接口和pdb都是一樣的。

4.Pycharm

使用Pycharm這個IDE進行調試。這個功能就比較強大了。

Pycharm也支持遠程調試。也就是在windows界面操作,進程運行在linux。

方法是:

  1. Settings-Project Interpreter 里面點擊Project Interpreter右邊的配置,點擊Add
  2. 選擇SSH Interpreter
  3. 如果已有遠程同步代碼配置,就選擇Existing Server configuration
  4. 否則就選擇New server configuration ,設置遠程機的IP和ssh端口和用戶名,密碼等
  5. 設置遠程機的Python地址,例如/data/env/bin/python
  6. 設置Sync folders。這個是windows和遠程機的目錄映射,例如E://project映射到/data/project。那如果執行E://project/test.py腳本就相當於執行/data/project/test.py腳本
  7. 創建測試的腳本,test.py
  8. 打開Run-Edit Configurations,修改test.pyPython interpreter為剛才設置的Remote Python
  9. 點擊 run test.py 就能在遠程機執行這個腳本了,console會展示遠程機的console
  10. 除了run,也可以debug

參考:
Python調試工具


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM