Ответ 1
http://docs.python.org/library/pdb.html
import pdb
pdb.set_trace()
Я не уверен, что то, что я прошу, возможно вообще, но поскольку python - это интерпретатор, это может быть. Я пытаюсь внести изменения в проект с открытым исходным кодом, но поскольку на питоне нет типов, трудно понять, что переменные имеют в качестве данных и что они делают. Вы не можете просто искать документацию по типу var, так как вы не можете быть уверены, какой именно тип. Я хочу перейти к терминалу, чтобы быстро изучить типы переменных и что они делают, набрав help (var) или print (var). Я мог бы сделать это, изменив код и затем повторно запуская программу каждый раз, но это будет намного медленнее.
Скажем, у меня есть программа:
def foo():
a = 5
my_debug_shell()
print a
foo()
my_debug_shell - это функция, о которой я прошу. Это переведет меня в оболочку " → > " интерпретатора python, где я могу ввести help (a), и это скажет мне, что a - целое число. Затем я набираю 'a = 7' и некоторую команду 'continue', и программа продолжает печатать 7, а не 5, потому что я ее изменил.
http://docs.python.org/library/pdb.html
import pdb
pdb.set_trace()
Вот решение, которое не требует изменений кода:
python -m pdb prog.py <prog_args>
(pdb) b 3
Breakpoint 1 at prog.py:3
(pdb) c
...
(pdb) p a
5
(pdb) a=7
(pdb) ...
Короче:
Однострочное частичное решение - просто положить 1/0
, где вы хотите точку останова: это вызовет исключение, которое будет улавливаться отладчиком. Двумя преимуществами этого подхода являются:
Точки останова, установленные таким образом, надежны против модификации кода (не зависят от конкретного номера строки);
Не нужно import pdb
для каждой отлаживаемой программы; вместо этого вместо этого можно напрямую вставить "точки останова", если это необходимо.
Чтобы поймать исключение автоматически, вы можете просто сделать python -m pdb prog.py…
, а затем ввести c
(ontinue), чтобы запустить программу. Когда достигается 1/0
, программа завершает работу, но переменные можно проверить как обычно с помощью отладчика pdb
(p my_var
). Теперь это не позволяет вам исправлять ситуацию и продолжать работу с программой. Вместо этого вы можете попытаться исправить ошибку и запустить программу еще раз.
Если вы хотите использовать мощный IPython shell, ipython -pdb prog.py…
делает то же самое, но приводит к лучшему интерфейсу отладчика IPython, Кроме того, вы можете делать все изнутри оболочки IPython:
%pdb
).%run prog.py…
. Когда возникает исключение, отладчик автоматически активируется, и вы можете проверять переменные и т.д.Преимущество этого последнего подхода состоит в том, что (1) оболочка IPython почти обязательна; и (2) после его установки отладка может быть легко выполнена через него (а не напрямую через модуль pdb). полная документация доступна на страницах IPython.
Python 3.7
имеет новый встроенный способ установки точек останова.
breakpoint()
Реализация breakpoint()
import pdb
и вызывает pdb.set_trace()
.
Не забудьте включить скобки ()
, так как breakpoint
- это функция, а не ключевое слово.
Вы можете запустить программу с помощью pdb и добавить контрольные точки перед запуском.
В действительности же, как правило, так же быстро редактировать код и вставлять вызов set_trace(), как заявил другой пользователь.
Не уверен, что такое настоящий вопрос. Python предоставляет вам отладчик "pdb" (сам Google) и, кроме того, вы можете добавлять данные для ведения журнала и отладки по мере необходимости.