【问题标题】:ipdb / set_trace() hangingipdb / set_trace() 挂起
【发布时间】:2015-03-14 23:40:29
【问题描述】:

我是使用 ipdb 的新手,并添加了以下示例

print "I see this print statement\n"
foo="bar"
import ipdb
ipdb.set_trace()
print "Never see this statement because program hangs:
print "But if the prior two debugging lines were removed it DOES show up"

在我的代码中的某个位置,远在有一些数据问题的部分之前。 通过添加这段代码,我的程序就会挂起:没有打印语句,没有断点,唯一继续的方法是点击 control-c。

这里可能发生了什么?

更新 我关闭/重新启动了 ipython。这清除了一些东西:现在我可以进入 ipdb 提示符

ipdb> 

但是,当我尝试打印任何变量时,它仍然挂起:

ipdb.  print foo

【问题讨论】:

  • 也许您可以复制粘贴运行脚本的调用,并包含您进入调试器并尝试执行任何typical debugging commands 的行,例如print。这样我们就不会猜测您所说的“无打印声明”是什么意思...
  • 谢谢 我无法复制代码 - 出于各种原因。由于程序挂起,因此无法执行任何命令。程序一直在运行(尽管结果不正确),直到我在 OP 中精确添加了这两行。我也确实看到了正常的打印语句之前调试命令,但没有看到之后它。
  • ipdb 显然是一个旨在与 iPython 结合使用的 python 调试器。这是故意的吗?你不是在找pdb吗?
  • @OliverW。我正在使用 ipython
  • 当您使用相同的 import 语句运行 hello world 脚本并在顶部调用 set_trace 时会发生什么(您最终会得到一个 3-LOC 文件)?它也挂了吗?

标签: python debugging ipdb


【解决方案1】:

我的团队经常遇到这种情况,因为我们所有的 AWS 实例都通过 NFS 安装了共享主目录。当文件位于 NFS 文件系统上时,SQLite 会出现一些问题。 ipython(和 ipdb)在幕后使用 sqlite。

ipython 的 sqlite 数据库路径是 ~/.ipython/profile_default/history.sqlite。

我的解决方案是将该文件替换为指向 /var/tmp 中空文件的符号链接。

【讨论】:

  • 感谢您的想法。这只是在 Mac 笔记本电脑上运行。
猜你喜欢
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多