有时候不得已使用命令行调试,下面介绍运用python的pdb模块进行命令行调试的基本方法。
进入调试
有两种方法进入调试:
- 在xxx.py中载入pdb模块,并在需要的地方设置好断点,然后在命令行执行 python xxx.py就可以进入调试
import pdb
pdb.set_trace() # 设置断点,在断点代码的上一行写入这行代码
- 在命令行使用参数进入调试 python -m pdb xxx.py,这样会自动停在第一行。
设置断点
# 设置当前脚本断点
(Pdb)b 10 # 断点设置在当前py的第10行
# 设置指定脚本断点
(Pdb)b xxx.py:20 #断点设置到 xxx.py第20行
# 删除断点
(Pdb)cl 1 #删除第1个断点
(Pdb)cl # 删除所有断点
运行
(Pdb)n # 单步运行,相当于IDE中的step over
(Pdb)s # 深入方法内部运行,相当于IDE中的step into
(Pdb)u # 跳出方法,相当于IDE中的step out
(Pdb)c # 跳到下一个断点
查看当前代码位置
(Pdb) l
65 newModelFile =outFile.replace("output.txt","model_corpus.pkl")
66 infoFile = newModelFile.replace("model_corpus.pkl","info.pkl")
67 topicsFile = newModelFile.replace("model_corpus.pkl","topics.pkl")
68 vocabInfo, idList = GetDataFromDisk.get_vocab(vocabFile)
69 pdb.set_trace()
70 -> Data = GetDataFromDisk.get_data(testFile,vocabInfo,UnuseData)
71 modelDict,InfoDict,topicsDict = GetDataFromDisk.get_Model(modelFile,outFile)
72 if Data == 1:
73 fw=open(outFile,"w")
74 fw.close()
75 print -1
第一次执行l命令,会打印出当前代码的上下各5行代码,此后每次执行l命令,都会连续往下打印10行代码,直到.py结尾。
打印变量
(Pdb)p param
# 如果变量是个复杂的对象,可以先打印查看变量的属性,然后查看变量的某个属性值
(Pdb)p dir(param)
(Pdb)p param.xxx
结束调试
(Pdb)q