我正在尝试调试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>
也许你有一些棘手的代码以复杂的方式操纵跟踪功能?或者你使用像psyco这样的加速器?
这将浪费许多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的 或者,我认为,其他更高级的调试器,我猜它为何不属于最初谷歌搜索的雷达。