我正在尝试调试Python程序,我在一个函数中插入了一个经典的'import pdb; pdb.set_trace()'行,就在生成堆栈跟踪的调用之前。然而,该调用似乎被忽略,即没有任何反应,我没有得到pdb提示。
在程序的那一点上,只有一个活动线程。没有检测到pdb模块的猴子修补。
欢迎任何可能导致调用set_trace被忽略的帮助。谢谢。
平台信息:Debian squeeze + python 2.6.5
代码提取:
import threading
print threading.active_count()
import pdb
print pdb
pdb.set_trace()
print "*****"
root_resource.init_publisher() # before changing uid
输出:
<lots of stuff>
1
<module 'pdb' from '/usr/lib/python2.6/pdb.pyc'>
*****
<stack trace in init_publisher>
答案 0 :(得分:7)
也许你有一些棘手的代码以复杂的方式操纵跟踪功能?或者您使用像psyco这样的加速器?
答案 1 :(得分:4)
这将浪费许多Python开发人员的时间。今晚我加入了自己的行列。我希望在我花了2个小时发现与我正在使用的大型库的类似问题之前找到了这篇文章。随后的谷歌搜索很难解释 pdb 和 pysco 不兼容的问题。从pdb开始的用户应该更容易看到问题。
我导入的库的内容深处是一个包含以下代码的文件:
try:
import psyco
psyco.bind(bdecode)
psyco.bind(bencode)
except ImportError:
pass
作者的一个可爱的姿态,显然没有人使用他们的代码,和谁也安装了psyco,他们会喜欢使用像 pdb 调试它;-)请注意,你可以问他们怎么意思不知道呢?
在探索问题时,我发现使用了:
import pdb; pdb.set_trace()
导入 psyco 之后,只是传递过来;既不是因为也不是理由。非常令人沮丧。
这个问题不会影响 PyDev 的调试,或者我认为,其他更高级的调试器,这就是为什么它不属于最初谷歌搜索的雷达。
答案 2 :(得分:0)
您可能没有运行该声明,原因是: