【发布时间】: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