在Python调试器中的成员函数处中断

在Python调试器中的成员函数处中断,python,debugging,Python,Debugging,这应该是一个无关紧要的问题,但到目前为止,我的研究毫无结果: 我第一次使用Python调试器(pdb),很高兴发现大多数命令都是使用gdb时熟悉的 但是,当我使用以下语句在类JamParser的parse()成员中设置断点时: (Pdb) b JamParser.parse *** The specified object 'JamParser.parse' is not a function or was not found along sys.path. 我尝试了几种变体,包括: (Pdb

这应该是一个无关紧要的问题,但到目前为止,我的研究毫无结果:

我第一次使用Python调试器(pdb),很高兴发现大多数命令都是使用gdb时熟悉的

但是,当我使用以下语句在类JamParser的parse()成员中设置断点时:

(Pdb) b JamParser.parse
*** The specified object 'JamParser.parse' is not a function
or was not found along sys.path.
我尝试了几种变体,包括:

(Pdb) b jam2dot.py:JamParser.parse
我假设,由于我从命令行调用了调试器,调试器知道文件中的实体。这是一个错误的假设吗


声明break可以将函数作为参数,但不提供任何语法帮助。那么,如何按名称为成员函数设置断点?

在调试器中引用名称之前,需要导入名称

(Pdb) from jam2dot import JamParser
(Pdb) b JamParser.parse

哇!这是一条多么可怕、误导人的错误信息。如果一个程序找不到什么东西,它应该这样说,而不是暗示它找到了它,但这不是正确的事情。是的,它相当差,不是吗?问题在于
b
命令要么使用文件名,要么使用函数,因此错误消息必须考虑这种模糊性(毕竟,您可能希望在名为
JamParser.py
的文件中有一个断点,并且错误地键入了扩展名)。但我同意它可以做得更好。我建议你提交一份bug报告!这可能是一篇很老的帖子,但为什么pdb模块不会自动导入实际正在调试的文件的成员呢?如果您可以访问源代码,我通常会删除一个
import pdb;pdb.set_trace()
在我想要的地方设置,而不是单步执行调试器。@Noufal:现在我有点经验了,我已经意识到你建议的价值,谢谢。不客气。两年前,我在PyCon从一群Python专业人士那里学到了这个技巧