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

Python 什么会导致pdb.set_trace()被忽略?,python,debugging,Python,Debugging,我试图调试一个Python程序,并插入了一个经典的“导入pdb”;函数中的set_trace()'行,就在生成堆栈跟踪的调用之前。但是,该调用似乎被忽略,即没有发生任何事情,并且我没有收到pdb提示 在程序的这一点上,只有一个活动线程。未检测到pdb模块的猴子补丁 欢迎提供任何可能导致set_trace调用被忽略的帮助。谢谢 平台信息:Debian挤压+python 2.6.5 代码摘录: import threading print threading.active_count() impor

我试图调试一个Python程序,并插入了一个经典的“导入pdb”;函数中的set_trace()'行,就在生成堆栈跟踪的调用之前。但是,该调用似乎被忽略,即没有发生任何事情,并且我没有收到pdb提示

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

欢迎提供任何可能导致set_trace调用被忽略的帮助。谢谢

平台信息:Debian挤压+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>

1.
*****

您可能没有运行该语句,原因之一是:

  • stacktrace不是你想要的 我想是的
  • 您将set_跟踪调用插入了 相似但错误的地方
  • 您正在运行另一个.py文件 而不是你编辑的那本
  • 您有自己的本地pdb.py文件 这是进口而不是进口 stdlib的那个

也许您有一些复杂的代码,以复杂的方式操纵跟踪函数?或者您正在使用像psyco这样的加速器?

这将浪费许多Python开发人员的时间。今晚我加入了他们的行列。我希望我在花2个小时发现我正在使用的一个大型图书馆的类似问题之前找到了这篇文章。随后的谷歌搜索几乎没有对pdbpysco不兼容性问题提供多少信息。对于刚开始使用pdb的用户来说,问题应该更加明显

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

try:
    import psyco
    psyco.bind(bdecode)
    psyco.bind(bencode)
except ImportError:
    pass
作者显然认为没有人在使用他们的代码,而且还安装了psyco,他曾经想使用诸如pdb之类的工具来调试它,这是多么可爱的姿态啊请注意,你可以问他们怎么会不知道

在探索该问题时,我发现:

import pdb; pdb.set_trace() 
导入psyco后,刚刚传递过来;既不为雷思也不为理由。真令人沮丧


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

你能提供代码来重现这个吗?
print
calls在那里工作吗?您是否尝试过
pdb.pm()
?()不幸的是,我不能很容易地复制它(否则我现在可能已经搞定了)。打印工作正常,pdb.pm()失败,因为此时我没有堆栈跟踪(该异常稍后会被某个C扩展吃掉,因此我无法轻松使用pm()和python-iNice try,但没有:我在原始消息中添加了一些代码,表明情况并非如此。您是否从交互控制台以外的其他地方传送stdin?还有一个原因:
您有两个名称完全相同的方法(可能是因为您进行了复制/粘贴)另一个没有import pdb;pdb.set_trace()
的方法是通过一些非常奇怪的设置加载的。结果证明,应用程序中的一个可选模块无法加载C扩展(缺少共享库),并且在使用psyco()的纯python实现上默认为Psyco对python框架做了一些奇怪的事情,这使得python调试器非常混乱。