【问题标题】:what can cause pdb.set_trace() to be ignored?什么会导致 pdb.set_trace() 被忽略?
【发布时间】:2011-03-28 20:23:43
【问题描述】:

我正在尝试调试 Python 程序,我在函数中插入了经典的“import pdb;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>

【问题讨论】:

  • 你能提供代码来重现这个吗? print 电话从那里工作吗?你试过pdb.pm()吗? (docs.python.org/library/pdb.html#pdb.pm)
  • 不幸的是,我无法轻松地重现这一点(否则我现在可能已经搞定了)。打印工作,pdb.pm() 失败,因为我当时没有堆栈跟踪(并且异常后来被一些 C 扩展吃掉,所以我不能轻易使用 pm() 和 python -i

标签: python debugging


【解决方案1】:

也许您有一些棘手的代码以复杂的方式操纵跟踪功能?还是您使用的是 psyco 之类的加速器?

【讨论】:

  • 通过一些非常奇怪的设置,结果发现应用程序中的一个可选模块无法加载 C 扩展(缺少共享库)并且默认使用 psyco (psyco.sf.net) 的纯 python 实现加快速度。 Psyco 用 python 框架做了一些奇怪的事情,这让 python 调试器很困惑。
【解决方案2】:

这会浪费大量 Python 开发人员的时间。今晚我把自己加入了他们的行列。我希望在我花了 2 个小时发现我正在使用的大型库的类似问题之前找到了这篇文章。随后的 Google 搜索几乎没有发现 pdbpysco 不兼容的问题。对于开始使用 pdb 的用户来说,该问题应该更加明显。

在我要导入的库的深处有一个文件,其中包含以下代码:

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

作者的一个可爱的姿态,显然没有人使用他们的代码,也安装了 psyco,会喜欢使用像 pdb这样的工具> 调试它;-) 请注意,您可能会问他们是怎么不知道的?

在探索问题时,我发现了以下用法:

import pdb; pdb.set_trace() 

psyco的导入之后,只是略过;既没有节奏也没有理由。确实非常令人沮丧。

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

【讨论】:

    【解决方案3】:

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

    • 堆栈跟踪不在您所在的位置 以为是
    • 您将 set_trace 调用插入到 相似但错误的地方
    • 您正在运行不同的 .py 文件 比你编辑的那个
    • 您有自己的本地 pdb.py 文件 那是进口而不是 来自标准库的那个

    【讨论】:

    • 不错的尝试,但没有:我在原始消息中添加了一些代码,表明情况并非如此。
    • 您是否从交互式控制台以外的其他地方管道输入标准输入?
    • 还有一个原因:you have two methods that have the exact same name(可能是因为您进行了复制/粘贴),而另一个没有 import pdb; pdb.set_trace() 的方法正在加载
    猜你喜欢
    • 1970-01-01
    • 2012-04-02
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多