2013-03-28 1 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() 

в разных строках (что облегчается такими вещами, как python-mode в vim). Однако, если я принимаю этот подход, например.

# 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 

Я не могу перечислить все точки останова, я с командой breakpdb, когда внутри. Вот пример: я запускаю файл, он производит продукцию, и переключается на 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 

в качестве альтернативы, я ж oold будет рад запустить мой скрипт с 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() ВИМ полностью виснет и производит следующее сообщение:

Code running. 

вопросы:

  1. Может ли мой ВИМ питон-режим будет лучше настроен таким образом он ведет себя с точки останова?
  2. Знаете ли вы, как запустить «отладочные сценарии» или запустить pdb с несколькими аргументами? Бонусные вопросы:
  3. Любые альтернативы плагину vdebug?

ответ

4

Question1:

Да. У меня также есть такая же проблема с вами при использовании режима python. Vim полностью висит и просто показывает «Code running.» Я понял, что проблема возникает в '~/.vim/bundle/python-mode/autoload/pymode/run.vim'. <leader>r запускает этот скрипт, а скрипт застрял в строке «py execfile(vim.eval('expand("%:p")'), context)». Я не прилагал усилий для устранения этой ошибки в скрипте. Вместо этого я использую простой скрипт, чтобы все запускалось.

Я делаю «питон.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 

Что нам нужно для запуска кода python и pdb в vim, правильно? Он работает сейчас! Однако, когда вы нажимаете <F5> в файле python в vim, он выпрыгнет из vim, чтобы запустить python в терминале, и когда программа python закончится, он автоматически вернется в vim. Это нормально, если вам это нравится.

Однако, я нашел лучший способ. Просто установите плагин vim под названием 'conque', 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 при нажатии <F5>.

enter image description here

Вопрос 2 & 3:

Я did't знаю несколько аргументов способ запуска отладчика. Возможно, вы можете настроить код выше, чтобы достичь этого. Но я могу порекомендовать вам отличный графический инструмент для отладки python в vim, называемый «vim-debug».

Вы можете получить 'ВИМ-отлаживать' от https://github.com/jaredly/vim-debug

Надежда это помогает! :)