什么可以导致pdb.set_trace()被忽略?

时间:2010-08-12 10:04:07

标签: python debugging

我正在尝试调试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>

3 个答案:

答案 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)

您可能没有运行该声明,原因是:

  • stacktrace不在你的位置 以为是
  • 您在a中插入了set_trace调用 类似但错误的地方
  • 您正在运行其他.py文件 而不是你编辑的那个
  • 您有自己的本地pdb.py文件 那是进口而不是 来自stdlib的那个