pdb debug python

来源:互联网 发布:电子数据交换的例子 编辑:程序博客网 时间:2024/06/06 18:15
如果是命令行debug的话,只要加上 -m pdb。可以看到(Pdb)就可以debug了。看到举例如下:
/grub-master$ python -m pdb util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
> /home/tao/grub-master/util/import_unicode.py(19)<module>()
-> import re
(Pdb)
 输入help 可以得到pdb的所有命令
(Pdb) help

Documented commands (type help <topic>):
========================================
EOF    bt         cont      enable  jump  pp       run      unt   
a      c          continue  exit    l     q        s        until
alias  cl         d         h       list  quit     step     up    
args   clear      debug     help    n     r        tbreak   w     
b      commands   disable   ignore  next  restart  u        whatis
break  condition  down      j       p     return   unalias  where

Miscellaneous help topics:
==========================
exec  pdb

Undocumented commands:
======================
retval  rv

常用的就是
查看:l
(Pdb) l
 14      #*
 15      #*  You should have received a copy of the GNU General Public License
 16      #*  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 17      #*
 18      
 19  ->    import re
 20      import sys
 21      
 22      if len (sys.argv) < 3:
 23          print ("Usage: %s SOURCE DESTINATION" % sys.argv[0])
 24          exit (0)

断点设置:b + 行号
(Pdb) b 22
Breakpoint 1 at /home/tao/grub-master/util/import_unicode.py:22

继续运行:c
(Pdb) c
> /home/tao/grub-master/util/import_unicode.py(22)<module>()
-> if len (sys.argv) < 3:

查看变量:p
 (Pdb) p sys.argv
['util/import_unicode.py', 'unicode/UnicodeData.txt', 'unicode/BidiMirroring.txt', 'unicode/ArabicShaping.txt', 'grub-core/unidata.c']

看到堆栈:bt
(Pdb) bt
  /usr/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
  <string>(1)<module>()
> /home/tao/grub-master/util/import_unicode.py(22)<module>()
-> if len (sys.argv) < 3:
单步运行:n
(Pdb) n
> /home/tao/grub-master/util/import_unicode.py(25)<module>()
-> infile = open (sys.argv[3], "r")
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(26)<module>()
-> joining = {}
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(27)<module>()
-> for line in infile:
(Pdb)
> /home/tao/grub-master/util/import_unicode.py(28)<module>()
-> line = re.sub ("#.*$", "", line)

退出:q
第二中方式是在原文件中加测试点,相当于断点
首先在源文件中埋断点:
for line in infile:
     line = re.sub ("#.*$", "", line)
     line = line.replace ("\n", "")
     line = line.replace (" ", "")
     if len (line) == 0 or line[0] == '\n':
         continue
     sp = line.split (";")
     curcode = int (sp[0], 16)
     import pdb
     pdb.set_trace()

然后直接运行就可以看到程序停在我们加pdb.set_trace()的下一行了

~/grub-master$ python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
> /home/tao/grub-master/util/import_unicode.py(37)<module>()
-> if sp[2] == "U":

0 0
原创粉丝点击