用多个参数启动python pdb?

问题描述 投票:3回答:1

我想知道是否有办法用多个参数启动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中,我无法列出命令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

或者,我很乐意在运行带有一些断点的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> 

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

Code running.

questions:

  1. 我的vim python-mode可以更好地配置,以便它具有断点的行为吗?
  2. 你知道一种运行“调试脚本”或启动多个参数的pdb的方法吗?奖金问题:
  3. 插件vdebug的任何替代品?
python vim pdb
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,对吗?它现在有效!但是,当你在vim中的python文件中按<F5>时,它将跳出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'

希望这些帮助! :)

© www.soinside.com 2019 - 2024. All rights reserved.