5

在 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 中止执行。这不是关于如何重组上面的代码,所以它可以工作!

4

2 回答 2

3

我发现 ctrl-z 可以暂停 python/ipdb 进程,然后使用 'kill %1' 来终止该进程运行良好,并且对我来说输入速度相当快(使用 bash 别名 k='kill %1')。我不确定是否有任何更清洁/更简单的东西。

于 2016-10-01T01:56:45.280 回答
2

模块文档

q(uit) 从调试器中退出。正在执行的程序被中止。

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

于 2016-09-30T14:12:59.447 回答