用多个参数启动python pdb?

我想知道是否有办法用多个参数启动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 

我在内部pdb时无法列出命令中断的所有断点.
下面是示例:我运行文件,它生成输出,并切换到pdb会话,但命令中断为空:

[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

或者,我很乐意在运行带有一些断点的python模式时从vim内部运行我的脚本.现在,它只是挂起.这意味着,如果我在代码中有断点时按< 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> 

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

Code running.

问题:

>我的vim python模式可以更好地配置,以便它具有断点的行为吗?
>您是否知道运行“调试脚本”或使用多个参数启动pdb的方法?
奖金问题:
>插件vdebug的任何替代品?

解决方法:

问题1:

是.使用python-mode时我也遇到了同样的问题. Vim完全挂起,只显示“代码正在运行”.
我发现问题发生在’〜/ .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

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

问题2& 3:

我不知道运行pdb的多参数方式.也许你可以自定义上面的代码来实现这一点.但我可以推荐你在vim中使用一个很酷的图形python调试工具,叫做’vim-debug’.

你可以从https://github.com/jaredly/vim-debug获得’vim-debug’

希望这些帮助!

上一篇:python – rpdb2:如何连接到pid


下一篇:python脚本pdb调试工具使用