从Spyder的命令行调试Python函数(或类)

时间:2018-02-28 16:05:52

标签: python debugging spyder

我是一名新的Python用户,我一直在Matlab编程,所以我决定使用Spyder IDE(看起来非常像Matlab IDE)。

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

是否可以从命令行启动类调试? 在Matlab中,我只是从命令行调用一个函数,它将在指定的断点处停止。在这里,我必须启动调试器,而不是调用函数。如果我只是打电话给以下人员:

import energy_model
x = energy_model.EnergyModel()

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

希望我的问题很明确。 谢谢, 米哈伊尔

2 个答案:

答案 0 :(得分:2)

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

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

__init__

然后从命令行运行将在def test(a_string): print(a_string) # breakpoint set here will be hit test("hello world") 方法中暂停执行。

此处列出了在命中断点时可以发出pdb的一些命令: https://nblock.org/2011/11/15/pdb-cheatsheet/

更新#1

spyder可以在

上触发断点的函数示例
module.exports = new twilio.Twilio(accountSid, authToken);

答案 1 :(得分:1)

如果要在Spyder中调试代码,最好单击蓝色的“播放/暂停”按钮进行调试,以运行其中的模块。

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

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