Как остановить программу на Python после pdb.set_trace()
При отладке сценариев в Python (2.7, работает в Linux) я иногда внедряю pdb.set_trace() (обратите внимание, что я на самом деле использую ipdb), например:
import ipdb as pdb
try:
do_something()
# I'd like to look at some local variables before running do_something_dangerous()
pdb.set_trace()
except:
pass
do_something_dangerous()
Я обычно запускаю свой скрипт из оболочки, например
python my_script.py
Иногда во время сеанса отладки я понимаю, что не хочу запускать do_something_dangerous(). Какой самый простой способ остановить выполнение программы, чтобы do_something_dangerous () не запускался и я мог вернуться в оболочку?
Насколько я понимаю, нажатие ctrl-d (или выдача команды quit отладчика) просто завершит работу ipdb, и программа продолжит работу (в моем примере выше). Кажется, нажатие ctrl-c вызывает KeyboardInterrupt, но я никогда не понимал контекст, в котором он был вызван.
Я надеюсь, что что-то вроде ctrl-q просто остановит весь процесс, но я не смог ничего найти.
Я понимаю, что мой пример очень надуманный, но мой вопрос о том, как прервать выполнение из pdb, когда отлаживаемый код настроен на перехват исключений. Речь идет не о том, как реструктурировать приведенный выше код, чтобы он работал!
2 ответа
Я обнаружил, что ctrl-z для приостановки процесса python/ipdb, за которым следует 'kill %1', чтобы завершить процесс, работает хорошо, и я довольно быстро набираю (с псевдонимом bash k='kill %1'). Я не уверен, что есть что-то чище / проще.
q (выход) Выход из отладчика. Выполняемая программа прерывается.
В частности, это вызовет следующую функцию отладчика, которая вызывается для BdbQuit
исключение.