2013-03-28 33 views
3

我想知道是否有辦法用多個參數啓動pdb。用多個參數啓動python 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模式來緩解)。 但是,如果我採取這種方法,例如

# 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當我與命令break斷點。 這裏是例如:我運行該文件時,它產生的輸出,並切換到pdb會話,但命令break是空的:

[2] [email protected]:~ $ 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 

另外,I W當運行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. 

問題:

  1. 可我的vim的python模式得到更好的配置使得它與斷點的行爲?
  2. 您是否知道運行「調試腳本」或使用多個參數啓動pdb的方法? 獎金問題:
  3. 該插件的任何替代品vdebug

回答

4

問題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',https://code.google.com/p/conque/的vim插件,並安裝'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 

,將窗口分割爲你運行Python代碼只是VIM裏面,當你按下<F5>

enter image description here

問題2 & 3:

餘did't知道多個參數的方式來運行PDB。也許你可以自定義上面的代碼來實現這個目的。但是我可以推薦你在vim中使用一個很酷的圖形化Python調試工具,叫做'vim-debug'。

您可以從https://github.com/jaredly/vim-debug

希望這些幫助得到 'VIM調試'! :)