问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

pdb python 调试 怎么用

发布网友 发布时间:2022-04-09 02:56

我来回答

1个回答

热心网友 时间:2022-04-09 04:26

 本文章讲述了如何用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 mymole
  >>> pdb.run('mymole.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 mole(没用过 pprint,详情请参考 Python Library Reference)。
  (Pdb)alias 以一个"别名"代替"一群除错命令",有点类似 c/c 的 macro(详情请参考 Python Library Reference)。
  (Pdb)unalias 取消某个 alias。
  (Pdb)[!]statement 在目前的环境(context)中执行叙述。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我在36o平台借了八千,12月分期,利息一千六百多,正归吗? 我要借款,借九千分一年还,哪里可以借,很急 有哪些质感不错的卫衣可以入手? 哪些品牌的印花卫衣设计感不错? 哪些潮牌服装比较受欢迎? 哪些潮牌卫衣比较受年轻人欢迎? 有哪些高质量的卫衣值得推荐? 中级编辑证对专业有限制吗 出版编辑可以直接报考中级吗 我的dell笔记本型号为1318 pp25l,重装了xp系统后没声音了,怎么办... 电脑高清截图方法 win10升级后怎么连不上wifi 玻璃肉眼看上去是绿色,是有毒的吗? 北京文化《我和我的家乡》第一个故事讲得什么? 做玻璃会有毒的吗 ? 我和我的家乡电影百度网盘链接? 《我和我的家乡》这部电影为什么能这么火? 我的家乡的主要内容概括是什么? 工伤一般怎么报销 工伤报销超过时间需要书面说明怎么写 PSP侠盗飞车罪恶都市 侠盗飞车罪恶都市抢银行问题 侠盗飞车4罪恶都市任务问题 侠盗猎车手罪恶都市,在夜总会里面的任务〈活计〉有个卡姆,我们在抢劫银行的时候把他杀了,会触发什么? win10怎么进安全模式不能开机 如何在EMACS中使用GDB调试 申请小程序需要办理什么增值电信业务许可证 小程序ICP证怎么办理,小程序ICP证申请流程 怎样去除衣物上的铁锈 小狗呕吐,拉屎有虫拉到出来,不吃东西.是有什么病啊?给什么他吃好? 巴中机场有哪些航班 恩阳机场开通哪些航班? 四川省巴中机场最新情况 巴中机场最新情况? 四川巴中机场到宁波已后有航班吗? 巴中有直飞深圳的航班吗? 四川巴中机场什么时候开航 巴中到江西有飞机吗? 巴中有没有到厦门的航班? 巴中机场的国家规划 巴中恩阳机场到济南有消息多久开通吗? 四川巴中航班信信息 巴中机场有到江苏的航线吗 四川巴中飞机场多久能通飞机 今天去往巴中恩阳机场的飞机中转改了吗 广东佛山卖抵押车的靠谱吗,买抵押车有什么需要注意的? 小时光提醒app怎么设置在一起多少天? 佛山高明能不能解压长安金融汽车贷款抵押? 少男头发中间白了是怎么回事? 头发好多中间是白的 ,我应该怎么办啊,有什么注意事项呢