如何用pdb进行python远程调试 pdb

ipython2013 的BLOG
用户名:ipython2013
文章数:37
访问量:1043
注册日期:
阅读量:5863
阅读量:12276
阅读量:341841
阅读量:1043359
51CTO推荐博文
好记性不如烂笔头,看到Python Optional Variables这一块,把学习的东西记录下来一. 可选的环境变量设置会写Java Hello World的同学一定知道如何设置环境变量,比如:JAVA_HOME,CLASSPATH等。Python中也一样有类似的环境变量,有一些还是可选的(比如:PYTHONPATH, PYTHONSTARTUP等)设置PYTHONPATH这个环境变量有什么用呢?我们知道在导入模块时(比如:import some_module_name),Python需要在某些路径(即sys.path这个列表中的路径)中去寻找相应的模块,而PYTHONPATH这个变量就是告诉Python,将它的值也加入到搜索路径中(即将PYTHONPATH的值合并到sys.path列表中)。export&PYTHONPATH=/tmp
python&-c&"import&&print&'found'&if&'/tmp'&in&sys.path&else&''&"输出结果是:found说明/tmp在sys.path中被找到了(即/tmp附加到了sys.path中)2. 设置PYTHONSTARTUP如果这个环境变量的值是一个可读的文件,那么该文件中的Python命令会在交互模式启动之前执行。echo&"print&'hello&world'"&&&/tmp/a.py
export&PYTHONSTARTUP=/tmp/a.py
python在启动python交互模式后,会看到有hello world已经被输出了。3. 设置PYTHONHOME一般在这个变量没有被设置的情况下,Python中的sys.path会列出一些模块的搜索路径。#&比如:
['',&'/usr/lib/python2.7',&'/usr/lib/python2.7/plat-linux2',&
'/usr/lib/python2.7/lib-tk',&'/usr/lib/python2.7/lib-old',&
'/usr/lib/python2.7/lib-dynload',&'/usr/local/lib/python2.7/dist-packages',&
'/usr/lib/python2.7/dist-packages']Python模块的搜索路径一般默认是sys.prefix/lib,可以看到很多路径是 /usr/lib/... 这种,其中/usr 就是sys.prefix这个变量的值(windows上可能是你安装Python的目录,比如: C:\Python2.7)。如果人工指定了PYTHONHOME,那么sys.prefix的值就会被替换。随便替换PYTHONHOME的值,可能造成Python无法启动,替换前请备份sys.prefix的值4. 设置PYTHONCASEOK这个变量只对Windows起效,可以设置为任意的值(比如:SET PYTHONCASEOK=OK)设置了以后,Python对模块的导入,将忽略大小写(只对用户module忽略大小写,对built-in module还是大小写敏感)5. 设置PYTHONIOENCODING看这个名字,IO Encoding可以猜到这个东西是和输入输出有关的。对,这个环境变量的作用就是指定Python程序标准输入输出(stdin,stdout,stderr)的编码。关于这个东西的运用,请参考:& 太长不看 :D再补充一些关于encode和decode的要点:在Python 2.x中,str类型的字符串,都是指string of bytes(二进制流的表示形式),一般来说1). '...'.decode([encoding_name])是将string of bytes转化成unicode string运用场景是,从网络或者文件中读取了二进制流,然后将其转化为unicode字符串,便于阅读。2). u'....'.encode([encoding_name])是将unicode string转化成string of bytes运用场景是,将unicode字符串转化成二进制流(Java的叫法也称为字节流),然后推向网络或者文件中。另外,还有两个方法,str.encode和unicode.decode,这两个方法意义不大(几乎很少运用)"...".encode() 会先默认隐式的用default encoding去decode,即调用"...".decode(sys.getdefaultencoding()) ,然后再继续调用"...".encode()而u"...".decode()也会先默认隐式的调用u"...".encode(sys.getdefaultencoding()),然后继续调用u"...".decode()二. 使用pdb模块调试、跟踪脚本有些时候,需要在没有IDE帮助的情况下,对脚本的运行情况进行调试、跟踪,可以使用Python内置的pdb模块(参考:一个简单的例子:对脚本test.py进行跟踪调试#!&/usr/bin/env&python
def&foo():
&&&&for&i&in&range(3):
&&&&&&&&s&+=&i
&&&&print&s
if&__name__&==&"__main__":
&&&&foo()运行命令:python&-m&pdb&test.py显示类似如下所示:&&/tmp/test.py(3)&module&()
-&&def&foo():
&&1&&&&&&#!&/usr/bin/env&python
&&3&&-&&&&&def&foo():
&&4&&&&&&&&&&s&=&0
&&5&&&&&&&&&&for&i&in&range(3):
&&6&&&&&&&&&&&&&&s&+=&i
&&7&&&&&&&&&&print&s
&10&&&&&&if&__name__&==&"__main__":
&11&&&&&&&&&&foo()
&&/tmp/test.py(10)&module&()
-&&if&__name__&==&"__main__":
(Pdb)(pdb)是调试提示符,在提示符下可以输入命令(具体参考)可以在(pdb)提示符下,查看标量的值,可以使用print 语句打印常用的简单命令有:命令全称简写命令描述listl列出当前执行脚本的内容(其中有箭头标注当前执行到的位置)nextn执行下一步,遇到函数不进入其内部。(相当于IDE中的step over)steps执行下一步,遇到函数进入其内部。(相当于IDE中的step into)breakb设置断点,如果不带参数,则列出当前执行脚本中的所有断点(号)。也可以带参数,比如,执行: b 6)代表在脚本的第6行设置断点,如右边所示,它的断点号是1。(Pdb)&b&6
Breakpoint&1&at&/tmp/test.py:6
&&5&&&&&&&&&&for&i&in&range(3):
&&6&B&&&&&&&&&&&&s&+=&i
&&7&&&&&&&&&&print&s
&10&&-&&&&&if&__name__&==&"__main__":
&11&&&&&&&&&&foo()clearcl清除脚本中的断点。1)不带参数,会询问是否清除脚本中的所有断点2)带参数会清除指定的断点。(注意清除的格式)cl(ear) [filename:lineno | bpnumber [bpnumber
...]]With a filename:lineno argument, clear all the breakpoints at this
line. With a space separated list of breakpoint numbers, clear those
breakpoints. Without argument, clear all breaks (but first ask confirmation).所以,要清除上面设置的第6行的断点,要么使用& cl 1& (清除断点号是1的断点);要么使用& cl test.py:6 (清除test.py中的第6行)使用 cl 6是错误的,因为目前为止,没有标号是6的断点!!continuec继续执行脚本,直到遇到断点停止。quitq退出调试That's it!
了这篇文章
类别:未分类┆阅读(0)┆评论(0)使用PDB调试Python程序 - 为程序员服务
使用PDB调试Python程序
pdb是Python自带的类gdb、cdb的调试工具。
在Sublime Text的SublimeREPL插件提供了pdb调试应用程序的功能,但是由于手上项目package太过复杂,所以这次我就直接在Django代码要调试的地方插入pdb代码,这样相当于直接在那个地方下了一个断点。可以在任何地方插入如下代码进行中断,即使是Django也能通过这种方式进行调试:
pdb.set_trace()
pdb常用命令:
n:执行下一行
s:执行下一行,如果有函数,会进入函数体
c:让程序正常运行,直到遇到断点
打印某个变量
!:感叹号后面跟一个语句,可以直接改变某个变量
l:列出当前将要运行的代码块
b:设置断点,例如’b 12’表示在第12行下端点,’b a.py:12’表示在a.py这个文件的第12行下断点
cl:清楚所有的断点
j:跳到指定的行数
a:打印当前函数的参数
q:推出调试
Change My World by Program
原文地址:, 感谢原作者分享。
您可能感兴趣的代码python pdb调试===_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
python pdb调试===
上传于||暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2550)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Python 调试 PDB',
blogAbstract:'在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个断点',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}python调试之pdb module - 动态语言组 - 小组 - 博客园
回复:1 浏览:956
19:02 来自
主要是使用pdb module,很多三方的调试工具底层也是使用此模块。
这种调试方式支持单步执行;
但实现起来稍显复杂,一般问题输出日志文件都可以解决。
上一话题:
下一话题:
登录后才能评论,请先或。}

我要回帖

更多关于 python pdb 调试符号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信