如何确定“总线错误”的原因

2024-05-17 19:17:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个带有yocto发行版和python 2.7.3的variscite板。

我有时会收到来自python解释器的总线错误消息。
我的程序至少在出错前几个小时或几天正常运行。
但是,当我得到它一次,我直接得到它时,我试图重新启动我的程序。
在系统再次工作之前,我必须重新启动。

我的程序只使用一个串行端口,一个usb通信和一些tcp套接字。

我可以切换到另一个硬件,并得到相同的问题。

我还将python selftest与
python -c "from test import testall"

我在这两个测试中都有错误

test_getattr (test.test_builtin.BuiltinTest) ... ERROR test_nameprep (test.test_codecs.NameprepTest) ... ERROR

自我测试总是在

test_callback_register_double (ctypes.test.test_callbacks.SampleCallbacksTestCase) ... Segmentation fault

但是当系统运行几个小时后,自我测试会在

ctypes.macholib.dyld Bus error

我用memtester检查了内存,似乎没问题。
我怎样才能找到问题的原因?


Tags: 端口test程序消息系统错误errorctypes
2条回答

一年后我找到了问题的间接原因。

我写了一个crc16模块,它使用:

from ctypes import c_ushort
...
value = c_ushort(crcValue >>8 ) ...

如果发生总线错误,这就是问题所在。

我不认为c_short()函数本身会导致问题,它只是一个函数,它表明有些东西坏了。

将系统升级到Linux version 3.14.38-6QP+g8740b9f (test@Yocto) (gcc version 4.9.2 (GCC) )后出现的问题

总线错误通常是由于应用程序试图访问硬件无法物理寻址的内存造成的。在您的情况下,存在一个分段错误,这可能会导致取消对坏指针的引用或类似的错误,从而导致访问物理上不可寻址的内存地址。我先从导致分段错误的根源开始,因为总线错误是次要症状。

相关问题 更多 >