任何Python IDE都支持在调试器的断点处停止

任何Python IDE都支持在调试器的断点处停止,python,debugging,pycharm,pydev,breakpoints,Python,Debugging,Pycharm,Pydev,Breakpoints,我正在寻找以下(IMHO,非常重要)功能: 假设我有两个函数fa()和fb(),它们都有一个断点 我现在在fa函数中的断点处停止 在交互式调试器控制台中,我调用fb() 我想在fb断点中停止,但不幸的是,pb()运行时忽略了断点。 另一个所谓的线程中有人将其称为“嵌套断点” 我是一名来自Matlab的开发人员,无论函数是如何调用的,在Matlab中,从控制台,从调试器。如果它有断点,它将停止 我读了过去关于这个问题的文章,没有找到任何解决办法。 我还尝试了最新的pycharm社区和最新的pyde

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

  • 假设我有两个函数fa()和fb(),它们都有一个断点

  • 我现在在fa函数中的断点处停止

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

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

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

    我读了过去关于这个问题的文章,没有找到任何解决办法。 我还尝试了最新的pycharm社区和最新的pydev,但没有成功。 我还读到VisualStudio做不到

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


    是否有一种技术/另一种IDE支持它?

    看看Eric Python IDE和VSC(Visual Studio代码)

    我跟踪了这个问题,发现没有人回答,我也考虑过这个功能,所以我开始在google上搜索

    TL;博士,你不能这么做 (我尝试了PyCharm、visualstudio和ericpythonide)

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

    我的方法 如果您有两个函数,并且希望调试这两个函数:

    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\u debugable\u var
    子函数:

  • 将断点放在注释所在的位置
  • 运行脚本
  • 当断点停止时,检查您的
    dummy\u debugable\u var
  • 进入
    (在PyCharm-F7上)
  • 检查您的
    子系统
    功能
  • 当您在
    子函数
    中时,您可以在上查看PyCharm的帧堆栈选项卡,这将允许您跳回父函数
    的帧并检查它


    这是一个更加有序的过程,而不是并行的过程,但它很简单,而且可以工作。

    如果是windows,我建议使用Visual Studio。它有很多特性断点、即时窗口等,但它没有我想要的特性据我所知,Python的最佳IDE是Visual Studio和Python的Wing IDE请参见此处测试Wing IDE,我需要的东西不起作用。从“调试探测”调用带有断点的函数不会在断点上停止。至于VS,它也不支持这个功能。哦,我忘了给PyCharm定尺寸了。它还有一个强大的调试器。我测试了pycharm,正如我在原始帖子中所说的,我正在寻找的“嵌套断点”功能不起作用。你们知道它是否存在于Eric Python和VSC中吗?这些IDE都不允许在从命令行调用的函数中的断点处停止。谢谢@sergey。你认为/知道这是否是语言限制吗?谢谢@或。我知道你建议的技术,但这仍然不是我想要的。认为“孩子”是另一个模块。我想打断家长的BP1,从控制台(而不是f7)调用孩子。别碰那个孩子。检查。编辑和修复。从控制台再次呼叫。inspec。修理直到孩子好。这样,我可以在其父调用方参数的上下文中编辑子模块。现在,我可以做的是每次都运行这两个函数(长…),或者保存参数和上下文并将它们加载到子函数中(…代码更改且不优雅)。这与进入子函数的步骤完全相同,进入最后一行,进行更改,然后继续返回到父函数,或者在返回到父函数后,我是否遗漏了什么。你又是如何管理这个孩子的?如果仍然不好,如何停止在子断点上进行再次修复?不要再次运行它,关键是在运行时使用调试器对
    child
    的最后一行进行修改,这样子断点将返回预期值。这相当于重新运行您的孩子,但方法不同。我的目的不是固定预期值,而是继续实际构建函数,直到它完成我需要它完成的任务,