Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58987
  • 博文数量: 30
  • 博客积分: 1211
  • 博客等级: 中尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 14:14
文章分类

全部博文(30)

文章存档

2011年(1)

2010年(22)

2009年(7)

我的朋友

分类: Python/Ruby

2010-04-10 10:12:44

Python调试
         --pdb、logging的使用

    一直以来困惑于怎么调试python脚本,没办法只能用IDE,比如自带的IDLE。IDE最大的不足就是对鼠标依赖太严重。上网搜索后,发现原来python也有类似于gdb的pdb,用法也和gdb差不多,这样python的调试也可以在vim中完成了。
   还有一个发现,就是很多人一直使用print和logging进行调试,其实也对,一方面可以在终端上看到输出,另一方面又可以在文件中记录运行过程,甚至可以通过邮件发送给别人,找大牛帮忙也方便多了。

pdb使用:

网上找了一些资料,在~/.vimrc中加入两个函数,可以实现基本的调试功能。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
Python Debugger Script
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"

" Block of python
"

python << EOF
import time
import vim

def SetBreakpoint():
    import re

    nLine = int( vim.eval( 'line(".")'))

    strLine = vim.current.line
    strWhite = re.search( '^(\s*)', strLine).group(1)

    vim.current.buffer.append(
     "%(space)spdb.set_trace() %(mark)s Breakpoint %(mark)s" %
         {'space':strWhite, 'mark': '#' * 30}, nLine - 1)
    vim.command( 'normal j')

    nLine = 0
    flag = 0
    for strLine in vim.current.buffer:
        if not flag:
            if re.search( '^(\s*#)', strLine):
                nLine += 1
            elif strLine == "import pdb":
                break
            else:
                flag = 1
        elif strLine == "import pdb":
            flag = 2
            break
    print 'flag:'+str(flag)
    if flag == 1:
        vim.current.buffer.append( 'import pdb', nLine)
        vim.command( 'normal j')

vim.command( 'map :py SetBreakpoint()')

def RemoveBreakpoints():
    import re

    nCurrentLine = int( vim.eval( 'line(".")'))

    nLines = []
    nLine = 1
    for strLine in vim.current.buffer:
        if strLine == 'import pdb' or strLine.lstrip()[:15] == 'pdb.set_trace()':
            nLines.append( nLine)
        nLine += 1

    nLines.reverse()

    for nLine in nLines:
        vim.command( 'normal %dG' % nLine)
        vim.command( 'normal dd')
        if nLine < nCurrentLine:
            nCurrentLine -= 1

    vim.command( 'normal %dG' % nCurrentLine)

vim.command( 'map :py RemoveBreakpoints()')


EOF

说明:
1、插入断点,删除当前断点直接dd, SHIFT+<F7>取消所有断点。
2、插入断点之后,在vim中!python % 运行当前脚本,会调用pdb自动进入调试状态,在这里还可以继续设置其它断点,用法和gdb类似。
3、用惯IDE的可能习惯用来运行脚本,可以做个简单的映射
autocmd FileType python nmap :!python %



logging使用:

FIXME

阅读(1196) | 评论(0) | 转发(0) |
0

上一篇:用vim开发python

下一篇:Python笔记

给主人留下些什么吧!~~