在vim中调试python flask应用程序

在vim中调试python flask应用程序,python,debugging,vim,Python,Debugging,Vim,是否有人使用例如调试vim中的flask应用程序。 我想要的是: 例如,我想在控制器方法中设置断点 def login(): (breakpoint)>> some code ... ... 以某种方式运行flask应用程序,当我发送例如登录表单时,在这个断点上停止并调试源代码 谢谢。你知道吗?您可以使用以下行在代码中的任意位置设置断点: import pdb; pdb.set_trace() 如果您使用的是vim,您可能也喜欢此快捷方式: :ia pdb import pdb;

是否有人使用例如调试vim中的flask应用程序。 我想要的是: 例如,我想在控制器方法中设置断点

def login():
(breakpoint)>> some code
...
...
以某种方式运行flask应用程序,当我发送例如登录表单时,在这个断点上停止并调试源代码

谢谢。

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

import pdb; pdb.set_trace()
如果您使用的是vim,您可能也喜欢此快捷方式:

:ia pdb import pdb; pdb.set_trace()<ESC>
:ia pdb导入pdb;pdb.set_trace()

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

此实现需要出色的性能,但在必要时应易于修改

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

...
map <S-F7> :py RemoveBreakpoints()<CR>
map <F7> :py SetBreakpoint()<CR>
...
。。。
映射:py RemoveBreakpoints()
映射:py SetBreakpoint()
...
~/.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')
...
。。。
def SetBreakpoint():
nLine=int(变量值(“.”)行)
strLine=vim.current.line
strWhite=re.search('^(\s*)',strLine.group(1)
vim.current.buffer.append(
(
“%(空格)spdb.set_trace()%(标记)s断点%(标记)s”%
{'space':strWhite'mark':'#'*30}
),
nLine-1
)
对于vim.current.buffer中的strLine:
如果strLine==“将ipdb作为pdb导入”:
打破
其他:
vim.current.buffer.append('import ipdb as pdb',2)
vim.命令('正常j1')
vim.command('write')
def RemoveBreakpoints():
nCurrentLine=int(变量值(“.”)行)
nLines=[]
nLine=1
对于vim.current.buffer中的strLine:
如果strLine==“将ipdb作为pdb导入”或strLine.lstrip().startswith('pdb.set_trace()'):
nLines.append(nLine)
nLine+=1
nLines.reverse()
对于nLine中的nLine:
vim.命令('normal%dG'%nLine)
vim.命令(“正常dd”)
如果nLine
您知道(在Flask调试模式下)可以从回溯页面在浏览器中打开调试器吗?不,我只想在控制器方法run app中设置断点并在断点处停止Flask使用Werkzeug调试器,我建议您尝试一下。