Python 如何在事后调试时退出ipdb?
我喜欢使用以下方法检查Python脚本中的错误:Python 如何在事后调试时退出ipdb?,python,ipython,pdb,ipdb,Python,Ipython,Pdb,Ipdb,我喜欢使用以下方法检查Python脚本中的错误: $ python3 -m pdb my_script.py 这会让我进入pdb提示符,从那里我可以c继续执行,当它出现错误时,我可以检查变量,然后q退出脚本执行以返回shell 我对iPython调试器模块进行了相同的尝试,因为它更丰富多彩: $ python3 -m ipdb my_script.py 但是,一旦检查完错误,我就无法退出调试器。使用qquit命令可以在重新执行脚本和事后模式之间切换: $ python3 -m ipdb my
$ python3 -m pdb my_script.py
这会让我进入pdb提示符,从那里我可以c
继续执行,当它出现错误时,我可以检查变量,然后q
退出脚本执行以返回shell
我对iPython调试器模块进行了相同的尝试,因为它更丰富多彩:
$ python3 -m ipdb my_script.py
但是,一旦检查完错误,我就无法退出调试器。使用q
quit命令可以在重新执行脚本和事后模式之间切换:
$ python3 -m ipdb my_script.py
ipdb> c
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> Inspect some variables at this point
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
如何退出此调试器?正如用户@ffeast评论的那样,有一些建议的解决方法。对我来说,这些很有效:
- 按ctrl+z并
(或任何作业编号)kill%1
- 执行
ipdb>导入操作系统;操作系统退出(1)
- 这是IPython 5.1中的一个bug。它已在中修复,从IPython 5.2及以后不再是问题。您现在可以使用
q
、quit()
或Ctrl+d退出调试器。使用Ctrl+z或打开第二个终端,然后查找进程(ps-ax | grep python
)并终止进程
逐步:
- 选项A:按ctrl+z
- 选项B:如果您可以访问Ubuntu GUI中的一个终端,请打开第二个终端(ctrl+alt+t)
- 选项C:如果您只能访问命令行,请访问第二个tty(ctrl+alt+F2)
- 选项D:如果您通过ssh访问服务器,请从另一个终端建立新连接
(使用选项B或C,以便打开第二个连接以执行命令)ssh服务器
ps-ax | grep python
的相应pythonPID
。例如,我的进程的进程id(python my_stucked_process.py
)将是112923
:Kill-9 112923
@Tutudaju建议使用ctrl+z,但他们的建议只会将进程发送到后台(它仍然存在,消耗内存)。您需要执行上述操作才能真正终止进程^C或^D不起作用吗?我偶尔也会遇到类似的情况,我不得不多次尝试exit@spruceb那也不行!可能与你的ipython版本重复?这个问题在ipython==5.1.1中重现。查看此评论:^Z也不起作用。ipdb捕获它并显示
^Z
ctrl+Z
不会真正退出进程,它只是将其发送到后台。例如,您可以使用命令fg 1
返回调试器,您将看到调试器仍然存在。第二个导入操作系统;os._exit(1)
在我的情况下起作用。正确,更新的答案带有后续的终止bg进程。退出操作似乎比使用pdb
本身慢。这是正常情况吗?退出调试器对我来说是立竿见影的。
3085 tty1 Sl+ 15:53 /usr/bin/python /usr/bin/x-terminal-emulator
112923 pts/2 Tl 0:01 python my_stucked_process.py
113118 pts/2 S+ 0:00 grep --color=auto python