【问题标题】:Debugging Python function (or class) from the command line in Spyder从 Spyder 的命令行调试 Python 函数(或类)
【发布时间】:2018-08-08 14:00:18
【问题描述】:

我是一个新的 Python 用户,我一直在使用 Matlab 进行编程,所以我决定使用 Spyder IDE(它看起来很像 Matlab IDE)。

现在我想调试(逐行执行以便理解)一些编写为具有多个内置函数的类的 python 代码。所以,我在类的__init__ 函数处插入了一个断点,但是,当我开始调试时,它没有转到指定的断点(因为我必须调用类初始化,而不仅仅是代码执行)。

是否可以从命令行启动类调试? 在 Matlab 中,我只会从命令行调用一个函数,它会在指定的断点处停止。在这里我必须启动一个调试器,而不是调用一个函数。如果我简单地调用以下内容:

import energy_model
x = energy_model.EnergyModel()

它只会执行并忽略我的断点。

希望我的问题很清楚。 谢谢, 米哈伊尔

【问题讨论】:

    标签: python debugging spyder


    【解决方案1】:

    首先,确保您点击的是 spyder 中的调试按钮,而不是运行按钮。运行按钮不会触发断点,因此您需要点击调试,然后继续到达代码中的第一个断点。

    如果失败,一种选择是使用 python 调试器 (pdb)。这完全来自命令行,即运行调试命令和接收调试信息也将通过命令行。

    class EnergyModel:
         __init__(self):
              # set breakpoint
              import pdb; pdb.set_trace()
              ...
    

    从命令行运行将在 __init__ 方法中暂停执行。

    当断点被击中时,您可以发出 pdb 的一些命令如下所示: https://nblock.org/2011/11/15/pdb-cheatsheet/

    更新 #1

    spyder可以触发断点的函数示例

    def test(a_string):
        print(a_string) # breakpoint set here will be hit
    
    test("hello world")
    

    【讨论】:

    • 感谢您的 FYI,但我的问题是:我可以使用调试模式(而不是运行模式)调用函数调用(或类创建命令)吗?
    • 我可能误会了。如果我在 spyder 上面的编辑 1 中设置断点,然后运行调试,然后继续,spyder 将在断点处停止。这不适合你吗?
    【解决方案2】:

    如果您想在 Spyder 中调试代码,最好通过单击蓝色的“播放/暂停”按钮来运行它所在的模块进行调试。

    那么我们如何调试一个没有脚本的全是类或函数的模块呢?我们添加了仅在此模块是我们单击 Play 时运行的脚本,方法是将其全部放在 if __name__=="__main__": 下。 (See here for more info on how that works.)

    然后我们可以在要调试的函数或类中设置一个断点,从if __name__==__"__main__": 中调用它,使用蓝色的播放/暂停按钮运行模块,然后从 IPython 控制台访问正在发生的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-20
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多