python 用pdb调试

简单调试 Python 程序

在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py):

$ vi d.py
#!/usr/bin/python

def main():
        i, sum = 1, 0
        for i in xrange(100):
                sum = sum + i
        print sum

if __name__ == ‘__main__‘:
        main()

$ python -m pdb d.py

运行上面的命令后进入以下界面,可以输入类似 gdb 的命令来改变程序的执行流程:

$ python -m pdb 1.py
> d.py(3)()
-> def main():
(Pdb)

list 显示程序的最近代码段:

(Pdb) list
  1  	#!/usr/bin/python
  2
  3  ->	def main():
  4  		i, sum = 1, 0
  5  		for i in xrange(100):
  6  			sum = sum + i
  7  		print sum
  8
  9  	if __name__ == ‘__main__‘:
 10  		main()
[EOF]

next 或者 n 执行下一行代码:

(Pdb) next
> d.py(9)()
-> if __name__ == ‘__main__‘:

用 break 在第6行设置一个断点:

(Pdb) break d.py:6
Breakpoint 1 at d.py:6

(Pdb) list
  1  	#!/usr/bin/python
  2
  3  	def main():
  4  		i, sum = 1, 0
  5  ->		for i in xrange(100):
  6 B			sum = sum + i
  7  		print sum
  8
  9  	if __name__ == ‘__main__‘:
 10  		main()
[EOF]

如果想在函数处设置断点:

(Pdb) break d.main
d.py:3

(Pdb) list
  1  	#!/usr/bin/python
  2
  3 B	def main():
  4  ->		i, sum = 1, 0
  5  		for i in xrange(100):
  6  			sum = sum + i
  7  		print sum
  8
  9  	if __name__ == ‘__main__‘:
 10  		main()
[EOF]

还可以给断点加条件,比如设置条件只有当 sum > 50 的时候才 break:

(Pdb) break d.py:6, sum > 50
Breakpoint 1 at d.py:6

如果想查看某个变量的值,可以用 pp 命令打印出来:

(Pdb) step
> d.py(5)main()
-> for i in xrange(100):
(Pdb) pp sum
0

可以直接在程序里使用 pdb 模块,import pdb 后 pdb.set_trace():

#!/usr/bin/python
import pdb

def main():
        i, sum = 1, 0
        for i in xrange(100):
                sum = sum + i
        pdb.set_trace()
        print sum

if __name__ == ‘__main__‘:
        main()

这样只要运行程序 ./d.py 就可以直接运行到 print sum 处:

$ ./d.py
> d.py(9)main()
-> print sum
(Pdb)

总结

命令 用途
break 或 b 设置断点
continue 或 c 继续执行程序
list 或 l 查看当前行的代码段
step 或 s 进入函数
return 或 r 执行代码直到从当前函数返回
exit 或 q 中止并退出
next 或 n 执行下一行
pp 打印变量的值
help 帮助
时间: 2024-10-12 02:45:37

python 用pdb调试的相关文章

python pdb调试

python -m pdb myscript.py #注意这会重启myscript.py 可以在程序中这么设置断点:import pdb; pdb.set_trace() 可以修改变量的值,但是要注意,前面加上!比如要修改final的值,应该这样!final="newvalue" 支持的命令:    p 打印变量    n next    step 细点运行    c continue    l list    a args 打印当前函数的参数    condition bpnumbe

【Python】代码调试(pdb与logging使用)

一.pdb使用 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等. 在程序中间插入一段程序(import pdb     pdb.set_trace() ),相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的 1.加入断点 #!/usr/bin/python import pdb _DEBUG = True def debug_d

python学习笔记之pdb调试

之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows cmd下或者anaconda prompt下,cd 到count_pdf.py目录下 2)大神告诉还可以在count_pdf.py上按shift点击鼠标右键--在此处打开命令窗口 2.python count_pdf.py会直接得到输出结果,这个不用我多说.下面介绍如何一步步调试 python -m

Python 代码使用pdb调试技巧

Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 python debug 相关工具进行 debug. 使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等.pdb 提供了一些常用的调试命令,详情见表

[转] python程序的调试方法

qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python def debug_demo(val): if val <= 1600 : print "level 1" print 0 elif val <= 3500 : print "level 2" print (val - 1600) * 0.05 elif val

python Debug 单步调试

一直犯愁的是python的调试,曾经写c都是编译完了用gdb直接调试了,轻松愉快.如今遇到这么一个解释型的程序.不知道怎么办了.用log吧,有时就是一个小程序,不想写这么多代码.打屏吧.有时屏幕翻得快,也是挺郁闷的.今天最终好了,看到了一个实用的东西.PDB 方法一:执行 python -m pdb myscript.py (Pdb) 会自己主动停在第一行.等待调试,这时你能够看看 帮助 (Pdb) h 说明下这几个关键 命令 <断点设置 (Pdb)b 10 #断点设置在本py的第10行 或(P

pdb 调试初步

不像在IDE中调试C++和java那样,pdb调试是一种交互式的调试:也就是说调试人员可以主动输入命令,而非点击鼠标,来控制调试的流程. 举个例子,以下代码中: 1 import pdb 2 a = "aaa" 3 pdb.set_trace() 4 b = "bbb" 5 c = "ccc" 6 final = a + b + c 7 print final 我想观察第2行 a = "aaa" 以后的流程,那么就在该语句后加

pdb调试小结

1.进入pdb模式   python -m pdb a.py2.调试python脚本 a) 添加断点      b funcA      b 1038      b a.py:1038   b) 单步执行      n      s   c) 列出源码      l   d) 打印变量      p retValue   e) 退出调试      q3.硬编码方式设置断点   import pdb   pdb.set_trace()4.互动模式   直接输入python,进入互动窗口   手动执

python 错误、调试、单元测试、文档测试

错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736 普通的错误处理机制就是在出错的时候返回一个错误代码,但是这样十分不方便,一是因为错误码是和正常结果一样的方式返回的,判断起来十分不方便,二是错误还需要一级一级的向上报,直到错误处理程