Segmentation Fault finden, embedded System

Gast #1976477
Hallo,

hätte mal eine Frage zur Vorgehensweise:

Ich entwickle auf einem Embedded Linux System(wobei man es eigentlich 
schon als vollwertigen PC bezeichnen kann) in C++.

Habe nun ein riesen Programm, das ab und an(bisher nich reproduzierbar) 
einen Seg Fault produziert.

Wie geht man am besten vor, um sowas einzugrenzen und den Fehler zu 
finden?
Ich kompiliere auf einem anderen Rechner und kopiere das Binary dann auf 
das System. Wüßte momentan auch nicht, wie ich das debuggen kann.

Hat jemand nen Tip wie man da am besten vorgeht?
Gast
Gibt es bei dem SegV einen coredump? wenn nicht hilft es ggf. mit dem 
Kommando
1
ulimit -c unlimited
in der Shell die Erzeugung von core-files zuzulassen.
Das Setzen des ulimit's muss auf jeden Fall vor dem Start erfolgen da es 
dann an den Prozess vererbt wird.
Sollte das ganze beim Booten schon gestartet werden muss dass 
ulimit-Kommando an geeigneter Stelle eingebaut werden.

Um das Corefile auszuwerten benötigt man gdb. Wie der Vorposter schon 
geschrieben hat sollte man sich den für seine Zielplatform 
"organisieren".

Am besten wäre ein Cross-gdb, um mit komfortablen Tools auch Sprünge 
innerhalb des Sourecodes z.b. in Emacs zu machen.

SegV hat in vielen Fällen einen NULL-Pointer-Zugriff zur Ursache.
Gast
Kann das Programm nur auf dem Embedded System laufen oder kann man es 
(evtl. mit Abstrichen) auch auf dem PC laufen lassen? Dann wäre evtl. 
valgrind ganz hilfreich, das kann ziemlich viele Speichersauereien 
finden.

Desweiteren kann man den Segfault per Signalhandler natürlich abfangen 
und dann mit den Backtrace-Tools der glibc den Aufrufbaum ausgeben:

http://www.delorie.com/gnu/docs/glibc/libc_665.html

Notfalls (falls das Binary keine Symbole hat) muss man die rohen 
Addressen halt mit den ungestrippten Binary vergleichen.
Gast
danke schonmal für die Stichworte.
Es handelt sich um ein Debianbasiertes(sehr abgespecktes) System. Die 
Chancen das ich da eines der Tools zum laufen bekomme sind also recht 
hoch s

Auf einem normalen PC kann ich das Programm nicht laufen 
lassen(zumindest nicht in sinnvoller Form)

Muss mich erstmal noch bischen durchwühlen. Habe noch nie mit einem 
Debugger auf einem Remote System gearbeitet und mit GDB auch noch nicht

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.