Ich arbeite an einem Variscite-Board mit einer yocto-Distribution und Python 2.7.3.So ermitteln Sie die Ursache für "BUS-Error"
Ich bekomme manchmal eine Busfehler Nachricht vom Python-Interpreter.
Mein Programm wird normalerweise mindestens einige Stunden oder Tage vor dem Fehler ausgeführt.
Aber wenn ich es einmal bekomme, bekomme ich es direkt, wenn ich versuche, mein Programm neu zu starten.
Ich muss neu starten, bevor das System wieder funktioniert.
Mein Programm verwendet nur eine serielle Schnittstelle, ein bisschen USB-Kommunikation und einige TCP-Sockets.
Ich kann zu einer anderen Hardware wechseln und die gleichen Probleme bekommen.
Ich benutzte auch die Python-Selbsttest mit
python -c "from test import testall"
Und ich bekomme Fehler für diese beiden Tests
test_getattr (test.test_builtin.BuiltinTest) ... ERROR test_nameprep (test.test_codecs .NameprepTest) ... ERROR
und der Selbsttest stoppt immer an
test_callback_register_double (ctypes.test.test_callbacks.SampleCallbacksTestCase) ... Segmentation Fehler
Aber wenn die Systeme läuft ein paar Stunden die Selbsttests früher stoppt bei
ctypes.macholib.dyld Busfehler
Ich habe den RAM mit Memtestes überprüft, es scheint in Ordnung zu sein.
Wie kann ich die Ursache für die Probleme finden?
memtester Upgrade war eine gute Idee, aber Sie können Kernel-Nachrichten lesen wollen ('dmesg'). Letzte (und erste) Zeit, die ich vor ein paar Wochen einen "Bus-Fehler" bekam, war, während ich ein paar Git-Befehle ausführte, aber es war vielleicht etwas, da die Ursache meiner Festplatte eindeutig darin lag, dass Kernel-Spuren aufhörten sagen Sie, dass dies auch Ihr Blitz sein könnte. – jbm
Normalerweise kommt ein Busfehler auf modernen Systemen, auf denen Linux ausgeführt wird, von dem Versuch, einen nicht ausgerichteten Speicherzugriff auszuführen. Was * normalerweise * passiert, wenn ein C-Programmierer denkt, dass er clever ist, indem er irgendeinen willkürlichen Zeiger auf einen Typ größer als "char" wirft, z. Faul über Serialisierung/Deserialisierung zu/von einem Datei- oder Socket-Lese-/Schreibpuffer. Ist Ihr gesamtes Programm tatsächlich in Python geschrieben oder wird Python nur als Testframework verwendet? Können Sie einfach einen Debugger an den Prozess anhängen und zurückverfolgen, wenn Sie den Busfehler treffen? –