【发布时间】:2016-05-01 18:06:06
【问题描述】:
我正在开发一个带有 yocto 发行版和 python 2.7.3 的 variscite 板。
我有时会收到来自 python 解释器的总线错误消息。
我的程序在错误发生前至少几个小时或几天正常运行。
但是当我得到它一次时,我尝试重新启动程序时直接得到它。
在系统再次工作之前,我必须重新启动。
我的程序只使用了一个串口、一个 USB 通信和一些 tcp 套接字。
我可以切换到另一个硬件并遇到同样的问题。
我还使用了 python 自测 python -c "from test import testall"
我得到这两个测试的错误
test_getattr (test.test_builtin.BuiltinTest) ... 错误 test_nameprep (test.test_codecs.NameprepTest) ... 错误
自检总是在
test_callback_register_double (ctypes.test.test_callbacks.SampleCallbacksTestCase) ... 分割 故障
但是当系统运行几个小时时,自测会提前停止
ctypes.macholib.dyld 总线错误
我用memtester检查了内存,好像没问题。
如何找到问题的原因?
【问题讨论】:
-
memtester 是个好主意,但您可能需要检查内核消息 (
dmesg)。几周前我最后一次(也是第一次)遇到“总线错误”是在运行一些 git 命令时,但它可能是任何事情,因为根本原因显然是我的硬盘驱动器死了,正如内核跟踪所显示的那样,所以我会说这也可能是你的闪光灯。 -
在运行 linux 的现代系统上,总线错误通常来自尝试执行未对齐的内存访问。这通常发生在 C 程序员认为他们很聪明的时候,将一些任意指针转换为大于
char的类型,例如懒于对文件或套接字读/写缓冲区进行序列化/反序列化。您的整个程序实际上是用 Python 编写的,还是只是将 Python 用作测试框架?当您遇到总线错误时,您可以将调试器附加到进程并回溯吗?