在Python调试器pdb中,如何在不终止调试会话的情况下退出交互模式

时间:2016-04-29 18:18:00

标签: python debugging pdb

使用python 3.5.1

当我使用python调试器模块运行脚本时:

  [home]# python -m pdb myscript.py

这将启动调试会话:

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

如果我想从调试会话中进入交互式终端,我可以发出interact命令:

(Pdb) interact
*interactive*
>>>

现在我可以与代码进行交互,就好像我处于正在运行的python交互模式一样,可以在我进入interact模式时访问调试器中运行的脚本范围内的任何函数或变量。 / p>

当我发出退出交互模式的命令(继续调试)时,它会终止整个调试会话:

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

[home]#

我也试过了quit(),它也终止了调试器。

如何在不终止整个调试会话的情况下退出interact模式?这甚至可能吗?

理想情况下,我想在我离开的时候返回调试模式,这样我就可以继续单步执行代码了。

9 个答案:

答案 0 :(得分:18)

Ctrl + D 发送EOF应该有效:

$ 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
...

答案 1 :(得分:3)

如果您使用的是ipdb,并且已使用Windows/Windows10,则应使用Cntrl-Z&gt; Return退出交互式shell。

ipython/python 3.5ipdb以及pdb

中进行了测试

答案 2 :(得分:1)

https://github.com/jupyter/notebook/issues/3603#issuecomment-747392494

from pandas.io.clipboard import copy; copy("\x04")

将 Ctrl-D 复制到剪贴板,然后您可以粘贴并输入。

答案 3 :(得分:0)

对于那些在jupyter笔记本中寻求解决方案的人(但又不想​​学习emacs)。我找到了一个适合的人(我来自here)。

在linux shell中:

echo ^D | xclip -selection clipboard 

但是,您输入的不是字符^ D,而是ctrl-v ctrl-d ...

答案 4 :(得分:0)

在我的Spyder版本(在Gnome上)中,我无法键入Ctrl+DCtrl+Shift+U。因此,要退出交互模式,请打开一个文本编辑器,键入Ctrl+Shift+U,然后在不松开Ctrl+Shift的情况下,按Ctrl+Shift+4。这会在文本编辑器中放置一个字符,我可以突出显示并复制它。然后,将其粘贴到Spyder的交互模式下,可以退出交互模式,然后返回调试器。

答案 5 :(得分:0)

如果您正在使用Emacs并通过pdb访问M-x shell交互模式,那么我能找到的最好的办法就是调用comint-quit-subjobC-c C-\)。这样会杀死整个调试会话,并使您返回到shell会话,而不是像comint-send-eofC-c C-d)那样杀死整个shell进程。

(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>

答案 6 :(得分:0)

在 Windows 10 上,按 Ctrl + Z 并按 Enter。

答案 7 :(得分:0)

在 Python 3 中,使用交互式解释器:

(Pdb) code.interact()
>>> (Enter your commands)
>>> ...
>>> exit() # Exit interactive mode
(Pdb) c

您也可以在主代码中导入“代码”,并在“Pdb”模式下使用 code.interact()

回复:https://docs.python.org/3/library/code.html

(注意:exit() 在 Python 2 的交互模式下不起作用)

答案 8 :(得分:-1)

在相关说明中,如果要完全退出调试器,只需按q,然后输入。