退出Python调试器ipdb

Joa*_*him 33 python debugging workflow exit ipdb

我经常使用ipdb,只是跳转到一段孤立的代码,即很难编写一个使用它的真实脚本.相反,我用模拟编写了一个最小的测试用例并跳转到它.

工作流程的示例:

def func():
   ...
   import ipdb
   ipdb.set_trace()
   ...

def test_case():
    ...
    func()
    ...
Run Code Online (Sandbox Code Playgroud)

然后,调用

py.test test_file.py -s -k test_case
Run Code Online (Sandbox Code Playgroud)

现在,通常我只检查一个或两个变量,然后想要退出.更改代码并重新执行.

我该如何戒烟?手册说q退出调试器.它(真的)没有.在调试器实际终止之前,您必须退出几次.Ctrl-C和Ctrl-D的相同行为(多次击中Ctrl-D的挫折最终也会退出终端).

是否有一种强制退出的聪明方法?这个工作流程是否合理?这样做的标准方法是什么?

KDN*_*KDN 43

以下对我有用:

import sys
sys.exit()
Run Code Online (Sandbox Code Playgroud)

在较新版本的ipython上,如上文和下文所述,这不起作用.在这种情况下,

import os
os._exit(0)
Run Code Online (Sandbox Code Playgroud)

应该仍然可以做到这一点.


Joa*_*him 40

我把以下内容放在我的手中 .pdbrc

import os

alias kk os.system('kill -9 %d' % os.getpid())
Run Code Online (Sandbox Code Playgroud)

kk 杀死调试器和(触发调试器的过程).


Sco*_*d77 7

这是最新版本的IPython 5.1.0的问题.您可以使用以下代码检查您的环境:

pip freeze | egrep -i '^i'
Run Code Online (Sandbox Code Playgroud)

它将通过降级到IPython == 5.0.0来解决.

pip install ipython==5.0.0
Run Code Online (Sandbox Code Playgroud)

这对我行得通.


joe*_*lom 7

正如另一个答案中所提到的,这是IPython 5.1中的一个错误.它在此拉取请求中得到修复,不再是IPython 5.2及其后的问题.您现在可以使用q,, quit()Ctrl+ d退出调试器.