使用 IPython 对 Python 进行断点诱导的交互式调试

新手上路,请多包涵

假设我有一个 IPython 会话,我从中调用了一些脚本:

 > run my_script.py

有没有办法在 my_script.py 中设置一个断点,我可以从 IPython 检查我的工作区?

我记得读过在 IPython 的早期版本中可以这样做:

 from IPython.Debugger import Tracer;

def my_function():
    x = 5
    Tracer()
    print 5;

但子模块 Debugger 似乎不再可用。

假设我已经打开了一个 IPython 会话: 如何在我选择的位置停止我的程序并使用 IPython 检查我的工作区

一般来说,我更喜欢不需要我预先指定行号的解决方案,因为我可能希望对上面的 Tracer() 进行多次这样的调用,而不必跟踪行号他们在哪里。

原文由 Amelio Vazquez-Reina 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 644
2 个回答

Tracer() 仍然存在于不同模块的 ipython 中。您可以执行以下操作:

 from IPython.core.debugger import Tracer

def my_function():
    x = 5
    Tracer()()
    print 5

请注意 Tracer 周围的附加调用括号

编辑:对于 IPython 6 以后的版本 Tracer 已弃用,因此您应该使用 set_trace() 代替:

 from IPython.core.debugger import set_trace

def my_function():
    x = 5
    set_trace()
    print 5

原文由 pankaj 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以运行它并在给定的行上设置断点:

 run -d -b12 myscript

其中 -b12 在第 12 行设置断点。当您进入该行时,您将立即进入 pdb,您需要输入 c 才能执行到该断点。

原文由 Wilduck 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题