pdb命令使用说明 python
2012-02-21 14:41
573 查看
当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试)
参考:http://docs.python.org/library/pdb.html
和 (pdb)help
用pdb进行python调试,用法基本和gdb差不多,
先看一个简单的例子:
epdb1.py.
文件变成:
可以运行这个程序,到断点出会停下来,和gdb类似,
可以执行命令:
直接回车是重复前一条命令!
p(print) 查看一个变量值
n(next) 下一步
s(step) 单步,可进入函数
c(continue)继续前进
l(list)看源代码
*********************************************************分割线*********************************************************************************
用pdb调试有多种方式可选:
1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前
python -m pdb myscript.py
2. 在Python交互环境中启用调试
>>> import pdb
>>> import mymodule
>>> pdb.run(‘mymodule.test()’)
3. 比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的.
然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了
常用的调试命令
h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入 h [command],例如:“h l” — 查看list命令
l(ist),可以列出当前将要运行的代码块
(Pdb) l
497 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
>断点设置
(Pdb)b 10 #断点设置在本py的第10行
或(Pdb)b ots.py:20 #断点设置到 ots.py第20行
删除断点(Pdb)b #查看断点编号
(Pdb)cl 2 #删除第2个断点
>运行
(Pdb)n #单步运行
(Pdb)s #细点运行 也就是会下到,方法
(Pdb)c #跳到下个断点
>查看
(Pdb)p param #查看当前 变量值
(Pdb)l #查看运行到某处代码
(Pdb)a #查看全部栈内变量
b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点
(Pdb) b 504
Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504
condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3”
(Pdb) condition 4 a==3
(Pdb) b
Num Type Disp Enb Where
4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504
stop only if a==3
cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点
(Pdb) cl
Clear all breaks? y
disable/enable,禁用/激活断点
(Pdb) disable 3
(Pdb) b
Num Type Disp Enb Where
3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505
n(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 _new
u’./new/MRM-8137.log’
!,感叹号后面跟着语句,可以直接改变某个变量
q(uit),退出调试
参考:http://docs.python.org/library/pdb.html
和 (pdb)help
用pdb进行python调试,用法基本和gdb差不多,
先看一个简单的例子:
epdb1.py.
# epdb1.py -- experiment with the Python debugger, pdb a = "aaa" b = "bbb" c = "ccc" final = a + b + c print final 比如要对这个程序进行调试: 1:在文件前面加上这一句,引入调试的模块。 import pdb 2:在要开始调试的一行加上[b]pdb.set_trace()[/b]
文件变成:
# epdb1.py -- experiment with the Python debugger, pdb import pdb a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print final
可以运行这个程序,到断点出会停下来,和gdb类似,
可以执行命令:
直接回车是重复前一条命令!
p(print) 查看一个变量值
n(next) 下一步
s(step) 单步,可进入函数
c(continue)继续前进
l(list)看源代码
*********************************************************分割线*********************************************************************************
用pdb调试有多种方式可选:
1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前
python -m pdb myscript.py
2. 在Python交互环境中启用调试
>>> import pdb
>>> import mymodule
>>> pdb.run(‘mymodule.test()’)
3. 比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的.
1. <span style="color: rgb(255, 119, 0); font-weight: bold;">if</span> 2. 3. __name__ == <span style="color: rgb(72, 61, 139);">"__main__"</span> 4. 5. :<br> 6. 7. a = <span style="color: rgb(255, 69, 0);">1</span> 8. 9. <br> 10. 11. <span style="color: rgb(255, 119, 0); font-weight: bold;">import</span> 12. 13. <span style="color: rgb(220, 20, 60);">pdb</span> 14. 15. <br> 16. 17. <span style="color: rgb(220, 20, 60);">pdb</span> 18. 19. .<span style="color: black;">set_trace</span> 20. 21. <span style="color: black;">(</span> 22. 23. <span style="color: black;">)</span> 24. 25. <br> 26. 27. b = <span style="color: rgb(255, 69, 0);">2</span> 28. 29. <br> 30. 31. c = a + b<br> 32. 33. <span style="color: rgb(255, 119, 0); font-weight: bold;">print</span> 34. 35. <span style="color: black;">(</span> 36. 37. c<span style="color: black;">)</span>
1. <span style="color: rgb(255, 119, 0); font-weight: bold;">if</span> 2. 3. __name__ == <span style="color: rgb(72, 61, 139);">"__main__"</span> 4. 5. :<br> 6. 7. a = <span style="color: rgb(255, 69, 0);">1</span> 8. 9. <br> 10. 11. <span style="color: rgb(255, 119, 0); font-weight: bold;">import</span> 12. 13. <span style="color: rgb(220, 20, 60);">pdb</span> 14. 15. <br> 16. 17. <span style="color: rgb(220, 20, 60);">pdb</span> 18. 19. .<span style="color: black;">set_trace</span> 20. 21. <span style="color: black;">(</span> 22. 23. <span style="color: black;">)</span> 24. 25. <br> 26. 27. b = <span style="color: rgb(255, 69, 0);">2</span> 28. 29. <br> 30. 31. c = a + b<br> 32. 33. <span style="color: rgb(255, 119, 0); font-weight: bold;">print</span> 34. 35. <span style="color: black;">(</span> 36. 37. c<span style="color: black;">)</span>
if __name__ == "__main__" : a = 1 import pdb pdb .set_trace ( ) b = 2 c = a + b print ( c)
然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了
常用的调试命令
h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入 h [command],例如:“h l” — 查看list命令
l(ist),可以列出当前将要运行的代码块
(Pdb) l
497 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
>断点设置
(Pdb)b 10 #断点设置在本py的第10行
或(Pdb)b ots.py:20 #断点设置到 ots.py第20行
删除断点(Pdb)b #查看断点编号
(Pdb)cl 2 #删除第2个断点
>运行
(Pdb)n #单步运行
(Pdb)s #细点运行 也就是会下到,方法
(Pdb)c #跳到下个断点
>查看
(Pdb)p param #查看当前 变量值
(Pdb)l #查看运行到某处代码
(Pdb)a #查看全部栈内变量
b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点
(Pdb) b 504
Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504
condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3”
(Pdb) condition 4 a==3
(Pdb) b
Num Type Disp Enb Where
4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504
stop only if a==3
cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点
(Pdb) cl
Clear all breaks? y
disable/enable,禁用/激活断点
(Pdb) disable 3
(Pdb) b
Num Type Disp Enb Where
3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505
n(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 _new
u’./new/MRM-8137.log’
!,感叹号后面跟着语句,可以直接改变某个变量
q(uit),退出调试
相关文章推荐
- pdb命令使用说明 python
- 使用Python中PDB模块中的命令来调试Python代码的教程
- Linux系统攻略关于vi替换命令的使用说明
- python升级导致yum命令无法使用的解决办法
- 连接命令层:BtuDatabaseControl组件完成数据库的无缝连接与命令执行(.net),含使用说明及组件下载
- python Flask JQuery使用说明
- 使用PDB调试Python程序
- mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)
- Linux系统下安装rz/sz命令及使用说明
- github 常用命令及其使用说明
- dos命令 cd命令使用说明[图文说明]
- Oracle oradebug 命令 使用说明
- Hadoop学习1_在使用命令行运行WordCount时,遇到的jar命令说明
- Linux下定时命令crontab的说明使用
- HBase总结(二十)HBase经常使用shell命令具体说明
- Python使用request调用http接口使用说明
- 常见 arm-linux- 命令使用说明
- Memcached常用命令及使用说明
- 使用Python生成Shell命令,批量执行程序代码解析
- Linux下yum命令使用说明