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

标签 python pdb ipdb

在 Python(2.7,在 Linux 上运行)中调试脚本时,我偶尔会注入(inject) 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 中止执行。这不是关于如何重构上面的代码以使其工作!

最佳答案

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

关于python - 如何在 pdb.set_trace() 之后停止 python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39793521/

相关文章:

python - 是否可以跳过 pdb/ipdb 中的断点?

python - ipdb调试器,跳出循环

python - 分组,计数和计算 Pandas 的比例?

python - 如何使 pandas 子图中的线条变粗

python - 让 'interact' 使用 IPython 控制台,而不是标准的 Python 控制台?

python-2.7 - 在 Python 中记录调用堆栈

python - 如何在我的 Scrapy 蜘蛛代码中使用项目加载器?

python - 'git clone .. .' works but not ' pip install ...' 对于相同的远程 url

python - 调试 CPython 操作码堆栈