【问题标题】:any Python IDE supports stopping in breakpoint from the debugger任何 Python IDE 都支持从调试器在断点处停止
【发布时间】:2018-02-04 18:32:27
【问题描述】:

我正在寻找以下(恕我直言,非常重要)功能:

  1. 假设我有两个函数fa()和fb(),它们都有断点。

  2. 我现在停在了fa函数的断点处。

  3. 在交互式调试器控制台中,我调用 fb()。

我想在 fb 断点处停止,但不幸的是 pb() 运行但忽略了断点。 另一个 SO 线程中的某个人将其称为“嵌套断点”。

我是一名来自 Matlab 的开发人员,在 Matlab 中,无论从控制台、调试器如何调用函数。如果它有断点,它就会停止。

我阅读了有关此主题的过去帖子,但没有找到任何解决方案。 我还尝试了最新的 pycharm 社区和最新的 pydev,但没有运气。 我还读到 Visual Studio 做不到。

这是 Python 固有的,技术上无法做到吗?

是否有支持它的技术/其他 IDE?

【问题讨论】:

  • 如果是windows,我会推荐Visual Studio。它有很多功能断点,即时窗口等,
  • 但它没有我想要的功能
  • 据我所知,适用于 Python 的最佳 IDE 是 Visual Studio 和适用于 Python 的 Wing IDE,请参见此处wingware.com/doc/debug/setting-breakpoints
  • 测试机翼 ide 和我需要的东西不起作用。从“调试探针”调用带有断点的函数不会在断点处停止。至于VS,也不支持这个功能。

标签: python debugging pycharm pydev breakpoints


【解决方案1】:

我关注了这个问题,看到没有人回答,我也想到了这个功能,所以我开始在谷歌上挖掘 and found your old question :)

TL;DR - 你不能这样做

(我尝试使用 PyCharm、Visual-Studio 和 Eric Python IDE)。

我猜这不起作用,因为它增加了调试的复杂性 - 当您进入下一行时发生了什么?如果你有很多线程/进程?可变类型会发生什么?

我的方法

如果您有 2 个函数并且想要同时调试它们:

def parent():
    dummy_debuggable_var = 1
    print('Running child() function')
    out = child(dummy_debuggable_var) #BP1 is here
    print(out)

def child(x):
    print('Calculating ...')
    return x+2

您的目标是调试dummy_debuggable_varchild 函数:

  1. 将断点放在注释所在的位置
  2. 运行脚本
  3. 当断点停止时,检查你的dummy_debuggable_var
  4. step-into(在 PyCharm 上 - F7
  5. 检查您的 child 函数

当您在 child 函数中时,您可以在 debugger window 上查看 PyCharm 的帧堆栈选项卡,这将让您跳回 parent 的帧并检查它。

这是一个更顺序的过程,而不是并行的,但它很简单并且有效。

【讨论】:

  • 感谢@or。我知道您建议的技术,但这仍然不是我想要的。认为“孩子”是另一个模块。我想打破父母的#BP1,从控制台(不是f7)调用孩子。停在孩子身上。检查。编辑和修复。从控制台再次调用。检查。修复...直到孩子好。这样我可以在他的父调用者参数的上下文中编辑子模块。现在我可以做的是要么每次都运行它们(长......),要么保存参数和上下文并将它们加载到子进程中(......代码更改而不是优雅)。
  • 这与 step into child 完全相同,进入最后一行,进行更改,然后继续返回父函数,还是我遗漏了什么?
  • 回到父母身边后。你怎么又跑孩子了?如果仍然不好,您如何在子断点处停止再次修复?
  • 你不要再次运行它,重点是在运行时使用调试器对child的最后一行进行修改,这样子进程就会返回你的预期值。这相当于重新运行您的孩子,但方法不同。
  • 我的目的不是修复预期值,而是实际继续构建函数,直到它完成我需要它做的事情,
【解决方案2】:

看看 Eric Python IDE 和 VSC(Visual Studio Code)

【讨论】:

  • 哦,我忘了提到 PyCharm。它还有一个强大的调试器。
  • 我测试了 pycharm,正如我在原帖中所说,我正在寻找“嵌套断点”的功能不起作用。你知道它是否存在于 Eric Python 和 VSC 中吗?
  • 这些 IDE 都不允许在从命令行调用的函数中的断点处停止。
  • 谢谢@sergey。您认为/知道这是否是语言限制?
猜你喜欢
  • 2023-03-12
  • 2015-06-30
  • 2010-11-25
  • 2011-07-14
  • 2013-09-27
  • 2015-07-17
  • 2015-02-08
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多