在pdb(python调试器)中,我可以在内置函数上设置断点吗?

在pdb(python调试器)中,我可以在内置函数上设置断点吗?,python,pdb,Python,Pdb,我想在set.update()函数上设置断点,但当我尝试时,会收到一条错误消息 例如: ss= set() ss.update('a') 断点: b set.update b ss.update 错误: The specified object 'ss.update' is not a function or was not found along sys.path. The specified object 'set.update' is not a function or was no

我想在set.update()函数上设置断点,但当我尝试时,会收到一条错误消息

例如:

ss= set()
ss.update('a')
断点:

b set.update
b ss.update
错误:

The specified object 'ss.update' is not a function
or was not found along sys.path.

The specified object 'set.update' is not a function
or was not found along sys.path.

(注意,我也尝试了结尾的括号,例如,
b set.update()
,但仍然出现了错误。我没有打印所有错误的排列。)

谢谢!使用@avasal的答案,我得出了以下结论:

因为我试图捕获set.update,所以我必须编辑sets.py文件,但这还不够,因为python使用的是内置的set类,而不是我编辑的set类。所以我重写了内置集合类:

import sets
locals()['__builtins__'].set=sets.Set
然后我可以在调试器中设置条件断点:

b set.update, iterable=='a' #successful
b set.update, iterable=='b' #won't stop for ss.update('a')
我的整个示例文件如下所示:

import pdb
import sets
locals()['__builtins__'].set=sets.Set

pdb.set_trace()
ss = set()
ss.update('a')

print "goodbye cruel world"
然后在调试器提示下,输入以下内容:

b set.update, iterable=='a'

希望这对其他人也有帮助。

如果您有模块的
py
文件,那么您可以,如果只有
pyc
文件,您将无法做到这一点……嗨@avasal,我有
py
文件,那么我该如何处理它?有两种方法,首先,在调用内置函数之前,您可以在代码中设置一个断点,然后执行该操作;其次,您可以通过在文件中导入pdb并添加
pdb.set_trace()来修改内置模块文件
然后开始调试第一种方法太费劲了-对于分散在我代码中的各种集合,有许多调用
update
。第二种方法对我不起作用。我试过两种方法:1。我在
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7中编辑了sets.py文件。结果:程序在
pdb.set_trace()处不停地运行。我尝试按文件设置断点:行号,因此,
b sets.py:343
,但出现了以下错误:
Exception AttributeError:“'NoneType'对象没有属性'path'”在被忽略的
中,我找到了它,并将更新我的原始问题。