pyyhon初學(xué)者容易忽視python調(diào)試程序(pdb),這里簡單介紹幾條重要的語句,詳細(xì)的請自行參閱官方文檔。
1.從命令行啟動調(diào)試
$ python -m pdb my_script.py
2.在腳本中啟動調(diào)試(Python 3.7+ 可以使用內(nèi)置函數(shù)breakpoint())
import pdbdef make_bread(): pdb.set_trace() return “I don’t have time”print(make_bread())
調(diào)試器的一些命令如下:
- c:繼續(xù)執(zhí)行
- w: 顯示當(dāng)前執(zhí)行語句的上下文
- a: 打印當(dāng)前函數(shù)的參數(shù)列表
- s: 執(zhí)行當(dāng)前行并停在第一個能停的地方
- n: 繼續(xù)執(zhí)行,直到當(dāng)前函數(shù)的下一行或當(dāng)前行直接返回
s(s)tep 就是單步執(zhí)行,遇到子函數(shù)就進入并且繼續(xù)單步執(zhí)行,作用是移動到下一個可執(zhí)行的代碼行。如果當(dāng)前行是一個函數(shù)調(diào)用,則調(diào)試器進入函數(shù)并停止在函數(shù)體的第一行。step可以幫助初步揭開代碼位置的謎團,例如:函數(shù)調(diào)用和函數(shù)本身可能在不同的文件中。
n(n)ext 是在單步執(zhí)行時,在函數(shù)內(nèi)遇到子函數(shù)時不會進入子函數(shù)內(nèi)單步執(zhí)行,而是將子函數(shù)整個執(zhí)行完再停止,也就是把子函數(shù)整個作為一步,作用是在同一個調(diào)用棧層中移動到下一個可執(zhí)行的代碼行。調(diào)試器不會進入函數(shù)體。如果當(dāng)前行是函數(shù)的最后一行,則,next將進入下一個棧層,并在調(diào)用函數(shù)的下一行停止。