pdb命令使用说明 python

本文转载自 http://blog.csdn.net/tianzhu123/article/details/7279451

当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试)
参考: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:在要开始调试的一行加上pdb.set_trace()


           文件变成:

         
 # 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. [python] view plaincopy
    1.  1. <span style="color: rgb(255, 119, 0); font-weight: bold;">if</span>    
    2.  2.     
    3.  3.  __name__ == <span style="color: rgb(72, 61, 139);">"__main__"</span>    
    4.  4.     
    5.  5. :<br>    
    6.  6.     
    7.  7.     a = <span style="color: rgb(255, 69, 0);">1</span>    
    8.  8.     
    9.  9. <br>    
    10. 10.     
    11. 11.     <span style="color: rgb(255, 119, 0); font-weight: bold;">import</span>    
    12. 12.     
    13. 13.  <span style="color: rgb(220, 20, 60);">pdb</span>    
    14. 14.     
    15. 15. <br>    
    16. 16.     
    17. 17.     <span style="color: rgb(220, 20, 60);">pdb</span>    
    18. 18.     
    19. 19. .<span style="color: black;">set_trace</span>    
    20. 20.     
    21. 21. <span style="color: black;">(</span>    
    22. 22.     
    23. 23. <span style="color: black;">)</span>    
    24. 24.     
    25. 25. <br>    
    26. 26.     
    27. 27.     b = <span style="color: rgb(255, 69, 0);">2</span>    
    28. 28.     
    29. 29. <br>    
    30. 30.     
    31. 31.     c = a + b<br>    
    32. 32.     
    33. 33.     <span style="color: rgb(255, 119, 0); font-weight: bold;">print</span>    
    34. 34.     
    35. 35.  <span style="color: black;">(</span>    
    36. 36.     
    37. 37. c<span style="color: black;">)</span>    
  1. [python] view plaincopy
    1.  1. <span style="color: rgb(255, 119, 0); font-weight: bold;">if</span>    
    2.  2.     
    3.  3.  __name__ == <span style="color: rgb(72, 61, 139);">"__main__"</span>    
    4.  4.     
    5.  5. :<br>    
    6.  6.     
    7.  7.     a = <span style="color: rgb(255, 69, 0);">1</span>    
    8.  8.     
    9.  9. <br>    
    10. 10.     
    11. 11.     <span style="color: rgb(255, 119, 0); font-weight: bold;">import</span>    
    12. 12.     
    13. 13.  <span style="color: rgb(220, 20, 60);">pdb</span>    
    14. 14.     
    15. 15. <br>    
    16. 16.     
    17. 17.     <span style="color: rgb(220, 20, 60);">pdb</span>    
    18. 18.     
    19. 19. .<span style="color: black;">set_trace</span>    
    20. 20.     
    21. 21. <span style="color: black;">(</span>    
    22. 22.     
    23. 23. <span style="color: black;">)</span>    
    24. 24.     
    25. 25. <br>    
    26. 26.     
    27. 27.     b = <span style="color: rgb(255, 69, 0);">2</span>    
    28. 28.     
    29. 29. <br>    
    30. 30.     
    31. 31.     c = a + b<br>    
    32. 32.     
    33. 33.     <span style="color: rgb(255, 119, 0); font-weight: bold;">print</span>    
    34. 34.     
    35. 35.  <span style="color: black;">(</span>    
    36. 36.     
    37. 37. c<span style="color: black;">)</span>    

[python] view plaincopy
  1. <span style="color:#ff7700;font-weight: bold;">if</span>  
  2.   
  3.  __name__ == <span style="color:#483d8b;">"__main__"</span>  
  4.   
  5. :  
  6.   
  7.   
  8.     a = <span style="color:#ff4500;">1</span>  
  9.   
  10.   
  11.   
  12.   
  13.     <span style="color:#ff7700;font-weight: bold;">import</span>  
  14.   
  15.  <span style="color:#dc143c;">pdb</span>  
  16.   
  17.   
  18.   
  19.   
  20.     <span style="color:#dc143c;">pdb</span>  
  21.   
  22. .<span style="color:black;">set_trace</span>  
  23.   
  24. <span style="color:black;">(</span>  
  25.   
  26. <span style="color:black;">)</span>  
  27.   
  28.   
  29.   
  30.   
  31.     b = <span style="color:#ff4500;">2</span>  
  32.   
  33.   
  34.   
  35.   
  36.     c = a + b  
  37.   
  38.   
  39.     <span style="color:#ff7700;font-weight: bold;">print</span>  
  40.   
  41.  <span style="color:black;">(</span>  
  42.   
  43. c<span style="color:black;">)</span>  

然后正常运行脚本,到了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),退出调试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值