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

2024-06-01 08:44:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图调试一个Python程序,并在函数中插入了一个经典的“import pdb;pdb.set_trace()”行,就在生成堆栈跟踪的调用之前。然而,这个调用似乎被忽略了,也就是说,什么都没有发生,我没有得到pdb提示。

在程序的那一点上,只有一个活动线程。未检测到pdb模块的猴子修补。

欢迎提供任何有关可能导致忽略设置跟踪的调用的帮助。谢谢。

平台信息:Debian squeeze+Python2.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>

Tags: 模块函数import程序init堆栈trace线程
3条回答

这将浪费一些Python开发人员的时间。今晚我加入了他们的行列。我真希望在花两个小时发现我正在使用的一个大型库的类似问题之前,我就找到了这篇文章。随后的Google搜索很难揭示pdb和pysco不兼容的问题。从pdb开始,用户应该更容易看到这个问题。

在我正在导入的库的内部深处是一个包含以下代码的文件:

try:
    import psyco
    psyco.bind(bdecode)
    psyco.bind(bencode)
except ImportError:
    pass

很明显,作者假设没有人使用他们的代码,他们也安装了psyco,这是一个多么可爱的姿态啊,他们会想使用一个工具,比如pdb来调试它;—)请注意,你可以问他们为什么不知道?

在探索问题的同时,我发现:

import pdb; pdb.set_trace() 

之后,心灵的导入刚刚被忽略;既没有节奏也没有理由。真令人沮丧。

这个问题不会影响使用PyDev或其他更高级的调试器进行调试,我想这就是为什么它不在最初的Google搜索范围之内。

您可能没有运行该语句,因为:

  • stacktrace不在你 我以为是
  • 您在 相似但错误的地方
  • 您正在运行另一个.py文件 比你编辑的
  • 你有自己的本地pdb.py文件 那是进口的而不是 stdlib的那个

也许你有一些复杂的代码来处理跟踪函数?或者你用的是像psyco这样的加速器?

相关问题 更多 >