2

例如,有人在 vim 中调试烧瓶应用程序吗我想要什么:例如,我想在控制器方法中设置断点

def login():
(breakpoint)>> some code
...
...

以某种方式运行烧瓶应用程序,当我发送例如登录表单时,在此断点处停止并调试源代码。

谢谢。

4

2 回答 2

3

你知道Python 调试器吗?您可以使用以下行在代码中的任何位置设置断点:

import pdb; pdb.set_trace()

如果你使用 vim,你可能也会喜欢这个快捷方式:

:ia pdb import pdb; pdb.set_trace()<ESC>
于 2013-03-27T13:24:51.737 回答
3

下面是我设置的相关部分,它允许我按下F7一条线并pdb.set_trace()插入一条线。Shift+F7再次删除它。调试本身发生在 vim 之外(在执行程序的命令行上),但从未让我失望。

这个实现需要出色的ipdb,但如果/必要的话应该很容易修改。

~/.vim/ftplugin/python/python.vim:

...
map <S-F7> :py RemoveBreakpoints()<CR>
map <F7> :py SetBreakpoint()<CR>
...

~/.vim/ftplugin/python/custom.py:

...
def SetBreakpoint():
    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
    )

    for strLine in vim.current.buffer:
        if strLine == "import ipdb as pdb":
            break
    else:
        vim.current.buffer.append('import ipdb as pdb', 2)
        vim.command('normal j1')
    vim.command('write')

def RemoveBreakpoints():
    nCurrentLine = int( vim.eval('line(".")') )

    nLines = []
    nLine = 1
    for strLine in vim.current.buffer:
        if strLine == 'import ipdb as pdb' or strLine.lstrip().startswith('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('write')
...
于 2013-03-27T13:28:13.757 回答