【问题标题】:Python crashes in rare cases when running code - how to debug?运行代码时Python在极少数情况下崩溃-如何调试?
【发布时间】:2012-08-11 20:41:21
【问题描述】:

我有一个问题,我花了几个月的时间认真对待!

基本上我正在运行需要读取和保存到 HD5 文件的代码。我为此使用 h5py。

调试起来非常困难,因为问题(无论是什么)只发生在大约 5% 的情况下(每次运行需要几个小时),当它到达那里时,它会完全崩溃 python,所以用 python 本身调试是不可能的。使用简单的日志也无法确定确切的崩溃情况 - 它似乎非常随机,在代码中的不同点崩溃,或者有延迟。

我尝试使用 OllyDbg 找出发生了什么,并且可以安全地得出结论,它始终在以下位置崩溃:http://i.imgur.com/c4X5W.png

似乎是在调用 python 本机 PyObject_ClearWeakRefs 后不久,出现访问冲突错误消息。奇怪的是文件被成功写入。什么会导致访问冲突错误?还是与 python 内部(例如堆栈?)而不是文件(即我的代码)相关?

有人知道这里发生了什么吗?如果没有,是否有更聪明的方法来找出到底发生了什么?也许一些隐藏的python日志或我不知道的东西? 谢谢

【问题讨论】:

  • 什么操作系统?确切的错误信息是什么? (例如,它是分段错误吗?)
  • 您可以创建自己的日志,python 有许多日志记录模块,例如docs.python.org/library/logging.html - 然后您可以将日志记录插入到您的所有代码中(如果它是某些公司的严肃代码或其他任何东西,无论如何都可能很聪明)-另外-您应该将代码分成更小的块,以便您可以更轻松地检查不同的部分。而不是通过函数传递变量,而是写入文件然后读取它们,因此如果出现错误,您可以从中断的地方继续。
  • 谢谢。我确实将我的代码分成小块,还包括日志记录。然而不幸的是,崩溃是非常随机的。记录器并没有让我很好地了解它,因为它每次都发生在不同的时间点。然而,调试器的调试输出是一致的——这让我觉得老实说这与硬件无关。操作系统是带有 python 2.7.2 的 windows 7。没有错误消息,因为 python 只是崩溃了。我能得到的最接近的是 OllyDbg 输出,这似乎暗示这是一个访问冲突错误(见截图)

标签: python debugging hdf5 ollydbg h5py


【解决方案1】:

PyObject_ClearWeakRefs 在 python 解释器本身中。但如果它只发生在少量运行中,它可能与硬件有关。您可以尝试的事情:

  • 在不同的机器上运行您的程序。如果它没有在那里崩溃,则可能是硬件问题。
  • 重新安装 python,以防安装的版本因某种原因损坏。
  • 运行内存测试程序。

【讨论】:

  • 你会推荐什么样的内存测试程序?为什么你认为记忆可能会影响这一点?
  • 根据我的经验,间歇性崩溃通常与硬件有关。例如问题电源电压或 CPU 温度往往会导致整机挂起,而 RAM 错误会影响个别程序。最臭名昭著的标志是一个 C 编译器死于信号 11。一个好的内存测试程序是 memtest86+:memtest.org
  • 嘿 Roland,我继续使用 memtest86+ 4.2,大约 1.5 小时后它通过了一次,没有错误。 =/ 你认为调试输出有帮助吗?我觉得它可能与 h5py 或线程相关..
  • 崩溃的地方在python解释器本身。 Python 代码中的错误往往会导致引发异常。根据我的经验,python 本身非常稳定。当然它可能会崩溃,但通常你必须努力这样做。请尝试重新安装python或在另一台机器上运行程序。
  • 我将重新安装 python - 不幸的是,其他机器目前不可行。如果错误再次发生,我将在此处发布(如果在接下来的 1-2 个月内不再发生,则标记为已解决)
【解决方案2】:

感谢您的所有回答。这次我运行了两个版本,一个带有新的 python 安装和我的相同程序,另一个在我原来的计算机上/安装,但是用 numpy 读/写程序替换所有 HDF5 读/写程序。

该程序继续在我的第二台计算机上偶尔崩溃,但在我的主计算机上,更改代码后我的崩溃为零。我认为因此可以安全地得出结论,这些问题与 HDF5 或更具体地与 h5py 相关。似乎更多的人在这方面遇到了 h5py 的问题。鉴于我的应用程序中的任何错误都可能导致巨大的经济损失,我决定完全抛弃 HDF5 以支持其他稳定的解决方案。

【讨论】:

    【解决方案3】:

    使用 try catch 语句。这可以放入程序中,以防止输入错误数据时程序崩溃

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多