Python pdb在文件中无法正确断点?
我希望能提供一个简单的例子,说明在使用标准库代码时会出现的问题,但不幸的是,这个问题只在我们内部的一个库中出现,而这个库是建立在sql alchemy之上的。
基本上,问题在于这个 break
命令:
(Pdb) print sqlalchemy.engine.base.__file__
/prod/eggs/SQLAlchemy-0.5.5-py2.5.egg/sqlalchemy/engine/base.py
(Pdb) break /prod/eggs/SQLAlchemy-0.5.5-py2.5.egg/sqlalchemy/engine/base.py:946
似乎被 pdb
完全忽略了。也就是说,尽管我非常确定这段代码是被执行的(因为我可以看到日志信息,而且我使用了 sys.settrace
来检查哪些文件的哪些行被执行了),但是 pdb
就是在那里不进行中断。
我怀疑使用了一个“egg”格式的库,可能让 pdb
对正在使用的文件感到困惑(如果我使用一个不是“egg”格式的库,比如 pickle
,就不会出现这个错误;那样一切都正常)。
这只是个猜测,不知道有没有人遇到过类似的问题?
3 个回答
0
你在用哪个版本的Python呢?我发现Python 2.7.3有类似的问题。有趣的是,我在ipython 0.12.1上却没有遇到同样的情况。
在Python 2.7.3中,调试器和错误追踪显示的异常发生位置是错误的。
而在ipython 0.12.1中,调试器和错误追踪显示的异常发生位置是正确的,但一旦发生异常,程序就会退出,这让后续的调试变得很困难。
0
我想这又不是因为setuptools引起的另一个问题吧?我这么问是因为我注意到那个路径里有“.egg”这个东西...
0
我在想,可能有一个旧的 .pyc 文件因为权限问题无法删除。你可以试着把你 Python 路径下所有的 .pyc 文件都删除掉,看看这样是否能解决问题。
这篇博客文章可能和你遇到的麻烦有关。