Подтвердить что ты не робот

В pdb debugger pdb, как вы выходите из интерактивного режима, не прерывая сеанс отладки

Использование python 3.5.1

Когда я запускаю script с помощью модуля отладки python:

  [home]# python -m pdb myscript.py

Это запустит сеанс отладки:

  > /somepath/to/myscript.py(1)<module>()
  -> import os
  (Pdb) 

Если я хочу ввести интерактивный терминал из сеанса отладки, я могу выполнить команду interact:

(Pdb) interact
*interactive*
>>>

Теперь я могу взаимодействовать с кодом, как если бы я находился в запущенном интерактивном режиме python, с доступом к любым функциям или переменной в области script, работающим в отладчике, в момент ввода режима interact.

Когда я выдаю команду для выхода из интерактивного режима (для продолжения отладки), он убивает весь сеанс отладки:

>>> exit()
The program exited via sys.exit(). Exit status: None
....long nasty stack trace here....

[home]#

Я также пробовал quit(), и он также завершает отладчик.

Как вы можете выйти из режима interact без завершения всего сеанса отладки? Возможно ли это?

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

4b9b3361

Ответ 1

Отправка EOF нажатием Ctrl + D должна работать:

$ python -m pdb myscript.py
> .../myscript.py(1)<module>()
-> import os
(Pdb) import code
(Pdb) code.interact()
Python 2.7.11 (default, Dec 27 2015, 01:48:39)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> <CTRL-D>
(Pdb) c
...

Ответ 2

Если вы используете ipdb и находитесь на Windows/Windows10, вы должны использовать Cntrl-Z > Return, чтобы выйти из интерактивной оболочки.

Протестировано в ipython/python 3.5 и ipdb и pdb

Ответ 3

Для тех, кто ищет решение в ноутбуке jupyter (и просто пока не хочет изучать emacs). Я нашел тот, который работал (мне отсюда).

В оболочке Linux:

echo ^D | xclip -selection clipboard 

Но вы вводите ^ D не как символы, а как ctrl-v ctrl-d...

Ответ 4

В моей версии Spyder (на Gnome) я не могу набрать Ctrl+D или Ctrl+Shift+U. Чтобы выйти из интерактивного режима, я открываю текстовый редактор, набираю Ctrl+Shift+U, затем, не отпуская Ctrl+Shift, нажимаю Ctrl+Shift+4. Это помещает символ в текстовом редакторе, который я могу выделить и скопировать. Затем я вставляю его в интерактивный режим Spyder и могу выйти из интерактивного режима и вернуться в отладчик.

Ответ 5

Если вы используете Emacs и обращаетесь к режиму взаимодействия pdb через M-x shell, лучшее, что я смог найти, это позвонить в comint-quit-subjob (C-c C-\). Это убивает весь сеанс отладки и возвращает вас к сеансу оболочки, а не убивает весь процесс оболочки, как это сделает comint-send-eof (C-c C-d).

(venv) c:\projects\my-project> python my-entry-point.py

    550         import ipdb; ipdb.set_trace(context=10)
--> 551         print("First line to start debugging at")

ipdb> interact
*interactive*
In : # call M-x comint-quit-subjob (C-c C-\)
^C
(venv) c:\projects\my-project>