pdb python 调试 怎么用

作者&投稿:杨购 (若有异议请与网页底部的电邮联系)
如何用pdb进行python调试~

本文章讲述了如何用pdb进行python调试讲解.
  当手边

  没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试)
  和 (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的 if __name__ == "__main__" :
  a = 1
  importpdb
  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)b10 #断点设置在本py的第10行
  或(Pdb)bots.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)com pareLog()
  -> 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),退出调试

  ==============================================================================================
  在python中使用pdb模块可以进行调试
  import pdb
  pdb.set_trace()

  也可以使用python -m pdb mysqcript.py这样的方式

  (Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助
  (Pdb) h
  说明下这几个关键 命令

  >断点设置
  (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 #查看全部栈内变量
  (Pdb)w 列出目前call stack 中的所在层。
  (Pdb)d 在call stack中往下移一层
  (Pdb)u 在call stack中往上移一层。如果在上移一层之后按下 n ,则会在上移之后的一层执行下一个叙述,之前的 function call 就自动返回。
  (Pdb)cl 清除指定的断点。如果没有带参数,则清除所有断点。
  (Pdb)disable 取消所有断点的功能,但仍然保留这些断点。
  (Pdb)enable 恢复断点的功能。
  (Pdb)ignore 设定断点的忽略次数。如果没指定 count,其初始 为 0。当 count 为 0 时,断点会正常动作。若有指定 count,则每次执行到该中断, count 就少 1,直到 count 数为 0。
  (Pdb)condition bpnumber [condition]
  (Pdb)j(ump) lineNo. 跳到某行执行。只有在 call stack 的最底部才能作用。
  (Pdb)l 列出目前所在档案中的位置。连续地 l 命令会一直列到档案结尾,可以使用指定行数或范围来打印。
  (Pdb)pp 和 p 命令类似,但是使用 pprint module(没用过 pprint,详情请参考 Python Library Reference)。
  (Pdb)alias 以一个"别名"代替"一群除错命令",有点类似 c/c 的 macro(详情请参考 Python Library Reference)。
  (Pdb)unalias 取消某个 alias。
  (Pdb)[!]statement 在目前的环境(context)中执行叙述。

Debug 对于是一项非常重要的功能,它能够帮助我们准确的定位错误,发现程序中的 bug。
python 提供了一系列 debug 的工具和包,可供我们选择。
pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括
设置断点
单步调试
进入函数调试
查看当前代码
查看栈片段
动态改变变量的值
启动方式:python -m pdb xxx.py

 本文章讲述了如何用pdb进行python调试讲解.
  当手边

  没有ide,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试)
  和 (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的 if __name__ == "__main__" :
  a = 1
  importpdb
  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)b10 #断点设置在本py的第10行
  或(Pdb)bots.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)com pareLog()
  -> 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),退出调试

  ==============================================================================================
  在python中使用pdb模块可以进行调试
  import pdb
  pdb.set_trace()

  也可以使用python -m pdb mysqcript.py这样的方式

  (Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助
  (Pdb) h
  说明下这几个关键 命令

  >断点设置
  (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 #查看全部栈内变量
  (Pdb)w 列出目前call stack 中的所在层。
  (Pdb)d 在call stack中往下移一层
  (Pdb)u 在call stack中往上移一层。如果在上移一层之后按下 n ,则会在上移之后的一层执行下一个叙述,之前的 function call 就自动返回。
  (Pdb)cl 清除指定的断点。如果没有带参数,则清除所有断点。
  (Pdb)disable 取消所有断点的功能,但仍然保留这些断点。
  (Pdb)enable 恢复断点的功能。
  (Pdb)ignore 设定断点的忽略次数。如果没指定 count,其初始 为 0。当 count 为 0 时,断点会正常动作。若有指定 count,则每次执行到该中断, count 就少 1,直到 count 数为 0。
  (Pdb)condition bpnumber [condition]
  (Pdb)j(ump) lineno. 跳到某行执行。只有在 call stack 的最底部才能作用。
  (Pdb)l 列出目前所在档案中的位置。连续地 l 命令会一直列到档案结尾,可以使用指定行数或范围来打印。
  (Pdb)pp 和 p 命令类似,但是使用 pprint module(没用过 pprint,详情请参考 Python Library Reference)。
  (Pdb)alias 以一个"别名"代替"一群除错命令",有点类似 c/c 的 macro(详情请参考 Python Library Reference)。
  (Pdb)unalias 取消某个 alias。
  (Pdb)[!]statement 在目前的环境(context)中执行叙述。


石林彝族自治县15291157669: pdb python 调试 怎么用 -
颜柱冰黄: 本文章讲述了如何用pdb进行python调试讲解. 当手边没有ide,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试) 和 (pdb)help用pdb进行python调试,用法基本和gdb差不多, 先看一个简单的例子: epdb1.py .# ...

石林彝族自治县15291157669: 如何在 Python 中使用断点调试 -
颜柱冰黄: 使用pdb工具,大约10分钟就学会了.设置断点.这个工具功能相当的强大.如果用好了,有如神助.不用担心不会用.直接输入help.它会逐层教会你.要学习这种方式学习,而不是上互联网搜索帮助.这个更unix化.另外就是使用idle,打开DEBUG面板,点击source,这样就启动了调试.你对着帮助看.大约明白什么是step, 什么是over就可以使用了.

石林彝族自治县15291157669: linux python pdb 怎么进入方法走断点 -
颜柱冰黄: 很简单呀 直接在要设置断点的地方加上下面 import pdb; pbd.set_trace()

石林彝族自治县15291157669: 怎么设置sublime text python路径 -
颜柱冰黄: 1.有SublimeREPL应该就可以调试了,输入没问题,调试的时候记得选 tools->SublimeREPL->python->run current file 或者 pdb current file (pdb 是调试工具,类似gdb) 不要用缺省的build 或者 ctrl-b 2.运行调试前别忘了保存,要不不会运行修改后...

石林彝族自治县15291157669: 如何使用linux下gdb来调试python程序 -
颜柱冰黄: Linux下使用pdb简单调试python程序python自带调试工具库:pdb# -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__main__': print 'debug starting...' print '*' * 10 print 'debug ending…' num = 100 s = func(num) print s 在...

石林彝族自治县15291157669: linux中 怎么使用gdb调试程序 -
颜柱冰黄: gdb是用来调试二进制程序的,不能调试python脚本. python自带pdb模块,可以用来调试自己的脚本. 使用python -m pdb ,交互方式,命令与gdb类似.

石林彝族自治县15291157669: 如何用在sublime pdb模式下查看类私有变量的值 -
颜柱冰黄: 如果对gdb比较熟悉的话,pdb就很容易上手.以一个demo快速了解常用的调试命令.def test(a): while True: if a > 10: break a += 1 return a if __name__ == '__main__': test(1) python -m pdb test.py进入调试环境 b test 在test函数处设置断点,断点...

石林彝族自治县15291157669: 怎样用sublime搭建python -
颜柱冰黄: 1、现在可以安装sublime text 3,然后安装package control,这玩意可以让你方便安装插件包.安装方法网上一砣.2、安装SublimeCodeIntel插件,可以实现语法自动完成功能.安装AutoPEP8可以自动将python规范化.3、重点安装...

石林彝族自治县15291157669: 如何配置python的sublimeREPL -
颜柱冰黄: 可以安装插件SublimeREPL试试,调试的时候记得选 tools->SublimeREPL->python->run current file 或者 pdb current file (pdb 是调试工具,类似gdb)不要用缺省的build 或者 ctrl-b,

石林彝族自治县15291157669: 如何利用.pdb文件去调试 -
颜柱冰黄: 1.新建一个 Visual C++ Win32 Console Application project.这个控制台的程序只是一个用来进行调试的宿主程序,所以可以任意的创建,在这里我创建一个默认的Win32 Console Application.2.选择工程的属性,在Debugging标签下,设置以下几...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网