Как остановить программу на 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 исключение.

Другие вопросы по тегам