如何用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)中执行叙述。
转载
本文章讲述了如何用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)中执行叙述。
当手边
没有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中安装pdbparser
答:举个栗子,要安装scikit-learn这个模块包,需要前置安装的还有scipy等几个暂时没有安装的模块,shift+右键,在此处打开命令窗口,在dos命令行中输入conda install sklearn,它会自动把需要安装的模块包安装后者更新了,然后安装你需要的scikit-learn模块,而且不用担心32位和64位的问题 ...
使用Spyder遇到问题,程序运行不下去,有谁知道是为什么吗?pdb是什么?
答:pdb: python debugger 就是python的调试器。查看和控制程序运行。运行不下去是因为代码中有pdb设置的断点 import pdbpdb.set_trace() # 设置断点注释掉上述内容就OK pdb的使用请baidu下吧
可以让你快速用Python进行数据分析的10个小技巧
答:Profiling(分析器)是一个帮助我们理解数据的过程,而Pandas Profiling是一个Python包,它可以简单快速地对Pandas 的数据框数据进行 探索 性数据分析。 Pandas中df.describe()和df.info()函数可以实现EDA过程第一步。但是,它们只提供了对数据非常基本的概述,对于大型数据集没有太大帮助。 而Pandas中的Profiling功能简单通...
PDB文件格式和Python中字符串表示如何对应?
答:整数字符串转换为对应的整数 int('12')小数字符串转换为对应小数 float('12.34')数字转换为字符串 str(123.45)ASCII码转换为相应字符 chr(97)字符转换为响应ASCII码 ord('a')
自己写的 Python 程序出错了,该如何修正?
答:4. 使用调试工具:Python有许多强大的调试工具,如pdb。你可以在代码中插入断点,然后运行你的程序。当程序执行到断点时,它会暂停,这样你就可以查看变量的值,单步执行代码,等等。5. 查阅文档:如果你不确定某个函数或方法的用法,或者你不知道如何修复你的错误,你可以查阅Python的官方文档,或者查找...
如何用在sublime pdb模式下查看类私有变量的值
答: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函数处设置断点,断点号为1 (Pdb) b test Breakpoint 1 at f:\python\pdb\test.py:1 b 2 在第二行设置断点,断点号为2 (Pdb...
在python中怎么实现goto功能
答:1、首先点击输入下方的代码:from goto import *@patch def f2():goto(10)2、然后输入下方的代码:print 'should not see this'label(10)for i in range(1,99999):print i 3、然后在输入下方的代码就完成了:if i == 5:goto('out')label('out')f2()...
python中的pdb
答:没必要,假设a 是正确的才会导入, 如果a 不正确,那就在a 中调试该函数.
切片检查是什么意思
答:因此,在使用切片时,我们通常需要进行检查以确保其正确性。检查切片的方法也有许多种,常用的包括使用print()函数将提取的数据打印出来进行查看,或者使用assert语句来断言该数据是否符合预期。此外,还可以通过使用Python的调试工具(如pdb、ipdb等)来进行逐行调试,检查每一行代码的执行结果是否正确。总之,...
python_ pdb是什么意思?
答:意思如下:“PYD”经常作为“Python data file”的缩写来使用,中文中表示:“python数据文件”。英文缩写词:PYD 英文单词:Python data file 缩写词中文简要解释:python数据文件 中文拼音: shù jù wén jiàn 缩写词流行度:11029 缩写词分类:Computing 简介:Python由荷兰数学和计算机科学研究学会的...