2013-06-14 4 views
2

Я недавно встретил ОЧЕНЬ классный модуль Python под названием pdb. Для тех, кто не знаком с ним, он очень прост в использовании и дает вам доступ ко всему, что угодно в пределах области действия в то время. Все, что вам нужно сделать, чтобы использовать это import pdb и поставить эту строку в программе, где вы хотите установить точку останова:Как сообщить отладчику Python о завершении программы?

pdb.set_trace() 

Это работает очень похоже на gdb, и я не был бы удивлен, если он был построен на вершине в некоторой степени. Во всяком случае, что бы я хотел знать:

Скажем, я остановился на своем первом контрольном пункте, оценил некоторые вещи, и теперь я хочу закончить свою программу. Как я могу сказать отладчику закончить программу, БЕЗ остановки на каких-либо других контрольных точках? Есть несколько команд, таких как continue, step и next, но ни один из них, похоже, не запускает остальную часть программы без перерыва. У кого-нибудь есть опыт с этим или я прошу чего-то, что не существует? Благодаря!

+1

Вы знаете, что круче, чем 'pdb'? ['ipdb'] (https://pypi.python.org/pypi/ipdb) - это дает вам много приятностей' 'IPython'' (закладка вкладки, подсветка синтаксиса, лучшая трассировка, лучшая интроспекция ...), что отсутствует в 'pdb' и имеет идентичный интерфейс. –

+0

Большое спасибо ali Мне нравится iPython, так что я определенно собираюсь проверить это! – Houdini

ответ

3

я бы просто переопределить функцию pdb.set_trace, удалить все точки останова и продолжить

pdb.set_trace = lambda : 0 

Хорошая вещь, что вы можете сделать обезьяну заплаток в отладчике.

[email protected]:~$ cat ~/tmp/test.py 
for i in range(1000): 
    import pdb 
    pdb.set_trace() 
[email protected]:~$ python ~/tmp/test.py 
> /home/vikasdhi/tmp/test.py(1)<module>() 
-> for i in range(1000): 

он остановился впервые

(Pdb) c 
> /home/vikasdhi/tmp/test.py(1)<module>() 
-> for i in range(1000): 
(Pdb) c 
> /home/vikasdhi/tmp/test.py(1)<module>() 
-> for i in range(1000): 

, когда я хочу, чтобы пропустить все, что я просто заменить функцию

(Pdb) pdb.set_trace = lambda : 0 
(Pdb) c 
[email protected]:~$ 
+0

Хм, я знаю, как использовать функции лямбда, но что именно здесь делает? – Houdini

+0

Функция pdb.set_trace не является ее функцией. Я заменил его на фиктивную функцию, которая ничего не делает, но возвращает 0 все время. Так что pdb.set_trace больше не остановит вашу программу, он просто вернет 0 (в этом случае) – Vikas

+1

Возможно, это поможет: http://stackoverflow.com/questions/5626193/what-is-monkey-patching. – Vikas

1

команда cl или clear.

cl (ear) [имя файла: lineno | bpnumber [bpnumber ...]]

С именем файла: lineno аргументом, очистите все точки останова в этой строке. С пробелом, разделенным списком номеров точек останова, очистите эти точки останова. Без аргумента очистить все разрывы (но сначала спросить подтверждение).

+0

'Quit' завершает мою программу, это не то, что я пытаюсь сделать. – Houdini

+0

Ох ... Извините, я неправильно понял ваше намерение. Я удалю сообщение через минуту. – mgilson

+0

Его классный не проблема – Houdini