Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。用pdb调试有多种方式可选:1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前python -m pdb myscript.py2. 在Python交互环境中启用调试>>> import pdb>>> import mymodule>>> pdb.run(‘mymodule.test()’)3. 比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的if __name__ == "__main__":a = 1import pdbpdb.set_trace()b = 2c = a + bprint (c)然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了常用的调试命令h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入 h [command],例如:“h l” — 查看list命令 l(ist),可以列出当前将要运行的代码块 (Pdb) l497 pdb.set_trace()498 base_data = {}499 new_data = {}500 try:501 execfile(base_file_name,{},base_data)502 -> execfile(new_file_name,{},new_data)503 except:504 logger.writeLog(“error! load result log error!”)505 print “load cmp logs error!”506 raise Exception, “load cmp logs error!”507 b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点 (Pdb) b 504Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3” (Pdb) condition 4 a==3(Pdb) bNum Type Disp Enb Where4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504stop only if a==3cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点 (Pdb) clClear all breaks? ydisable/enable,禁用/激活断点 (Pdb) disable 3(Pdb) bNum Type Disp Enb Where3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的 s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中 c(ont(inue)),让程序正常运行,直到遇到断点 j(ump),让程序跳转到指定的行数 (Pdb) j 497> /home/jchen/regression/regressionLogCMP.py(497)compareLog()-> pdb.set_trace()a(rgs),打印当前函数的参数 (Pdb) a_logger =_base = ./base/MRM-8137.log_new = ./new/MRM-8137.log_caseid = 5550001_toStepNum = 10_cmpMap = {‘_bcmpbinarylog’: ‘True’, ‘_bcmpLog’: ‘True’, ‘_bcmpresp’: ‘True’}p,最有用的命令之一,打印某个变量 (Pdb) p _newu’./new/MRM-8137.log’!,感叹号后面跟着语句,可以直接改变某个变量 q(uit),退出调试 发现在命令行下调试程序也是一件挺有意思的事情,记录下来分享一下w ,Print a stack trace, with the most recent frame at the bottom.An arrow indicates the "current frame", which determines the context of most commands. 'bt' is an alias for this command.d ,Move the current frame one level down in the stack trace(to a newer frame).u ,Move the current frame one level up in the stack trace(to an older frame).使用 u 和 d 命令,我们可以在栈帧之间切换,用以获取其相关上下文变量信息。w可以显示最近的一些栈帧信息。
转载于:https://www.cnblogs.com/sunyongjie1984/p/5201935.html
