如何在pdb.set_trace()之后暂停python程序

时间:2016-09-30 14:10:26

标签: python pdb ipdb

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

我通常从shell运行我的脚本,例如

python my_script.py

有时在我的调试会话中,我意识到我不想运行do_something_dangerous()。停止程序执行的最简单方法是什么,以便do_something_dangerous()不会运行,我可以退回到shell?

据我所知,按ctrl-d(或发出调试器的退出命令)只会退出ipdb,程序将继续运行(在上面的例子中)。按ctrl-c似乎引发了KeyboardInterrupt,但我从未理解它被引发的上下文。

我希望像ctrl-q这样的东西可以简单地删除整个过程,但我还没有找到任何东西。

我知道我的例子非常有用,但我的问题是如何在调试代码设置为捕获异常时从pdb中止执行。它不是关于如何重构上面的代码,所以它的工作原理!

2 个答案:

答案 0 :(得分:1)

来自module docs

  

Q(UIT)   退出调试器。正在执行的程序被中止。

具体来说,这将导致调用的下一个调试器函数引发BdbQuit异常。

答案 1 :(得分:1)

我发现ctrl-z暂停python / ipdb进程,然后'kill%1'终止进程效果很好,我输入相当快(使用bash别名k ='kill%1' )。我不确定是否有更清洁/更简单的东西。