3

我想知道是否有办法用多个参数启动 pdb。

目前我知道我可以做到这一点:

python -m pdb script.py 

然后手动设置断点,使用:

(Pdb) break
(Pdb) break 2
Breakpoint 1 at /home/ozn/test2.py:2
(Pdb) break 3 
Breakpoint 2 at /home/ozn/test2.py:3
(Pdb) break

我还可以插入:

pdb.set_trace() (or with ipdb.set_trace()

在不同的行中(这可以通过 vim 中的 python-mode 之类的东西来缓解)。但是,如果我采用这种方法,例如

# note: break points from python-mode in vim
print "hello "
a = 1
import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
a =+1
import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
print a   
i = 9 

break在 inside 时,我无法使用命令列出所有断点pdb。这是示例:我运行文件,它产生输出并切换到pdb会话,但命令break为空:

[2] ozn@deboz:~ $ python 1.py
hello 
> /home/ozn/1.py(4)<module>()
      3 import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
----> 4 a =+1
      5 import ipdb; ipdb.set_trace()  # XXX BREAKPOINT

ipdb> list
      1 print "hello "
      2 a = 1
      3 import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
----> 4 a =+1
      5 import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
      6 print a
      7 
      8 i = 9

ipdb> break
ipdb> 

理想情况下,我想像这样启动 pdb:

python -m pdb script.py b 2 b 3

当在里面时,提示应该这样做:

(Pdb) break
(Pdb) break 2
Breakpoint 1 at /home/ozn/test2.py:2
(Pdb) break 3 
Breakpoint 2 at /home/ozn/test2.py:3
(Pdb) break

或者,我很乐意在vim运行带有一些断点的 python 模式时从内部运行我的脚本。现在,它只是挂起。<lead>r意思是,如果我在代码中有断点时按下,它会挂起,或者在最好的情况下会产生一些像这样的垃圾:

~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
Code running.> /home/ozn/1.py(4)<module>()
                                                3 import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
                 ----> 4 a =+1
                                    5 import ipdb; ipdb.set_trace()  # XXX BREAKPOINT

     ipdb> 

将断点设置为时import pdb; pdb.set_trace(),vim 完全挂起并产生以下消息:

Code running.

问题:

  1. 可以更好地配置我的 vim python-mode 以使其与断点一起运行吗?
  2. 您知道运行“调试脚本”或使用多个参数启动 pdb 的方法吗?奖励问题:
  3. 插件的任何替代品vdebug
4

1 回答 1

5

问题1:

是的。在使用 python-mode 时,我也遇到了同样的问题。Vim 完全挂起,只显示 ' Code running.' 我发现问题出现在 ' ~/.vim/bundle/python-mode/autoload/pymode/run.vim'。<leader>r使该脚本运行,并且脚本卡在“ py execfile(vim.eval('expand("%:p")'), context)”行。我没有努力解决脚本中的这个错误。相反,我使用一个简单的脚本来让一切运行。

我制作了一个'python.vim'文件,粘贴以下代码并将文件放在' ~/.vim/plugin/after/ftdetect/python.vim'(如果你没有这个文件夹,创建一个)。

" Python
if executable("python")
  autocmd BufRead,BufNewFile *.py map <F5> :w<cr>:!python %<CR>
else
  autocmd BufRead,BufNewFile *.py map <F5> :echo "you need to install Python first!"<CR>
endif

我们需要的是在vim中运行python代码和pdb,对吧?现在可以了!但是,当你<F5>在 vim 中按下一个 python 文件时,它会跳出 vim 在终端中运行 python,当 python 程序完成时,它会自动跳转回 vim。喜欢就好了。

不过,我找到了更好的方法。只需安装一个名为“ conque ”的vim插件,https://code.google.com/p/conque/,然后安装“ iPython ”。然后,您应该如下更改“python.vim”代码。

" Python
if executable("python")
  autocmd BufRead,BufNewFile *.py map <F5> :execute 'ConqueTermSplit ipython '.expand('%:p')<CR>
else
  autocmd BufRead,BufNewFile *.py map <F5> :echo "you need to install Python first!"<CR>
endif

现在,当您按下 时,它会在 vim 内拆分一个窗口为您运行 python 代码<F5>

在此处输入图像描述

问题 2 和 3:

我不知道运行 pdb 的多参数方式。也许您可以自定义上面的代码来实现这一点。但是我可以向您推荐一个很酷的 vim 中的图形化 python 调试工具,称为“vim-debug”。

您可以从https://github.com/jaredly/vim-debug获取“vim-debug”

希望这些帮助!:)

于 2013-08-30T08:17:37.243 回答