Forum: PC-Programmierung Segmentation Fault finden, embedded System


von funky (Gast)


Lesenswert?

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?

von madler (Gast)


Lesenswert?

Wenn das ein Linux-System ist, gibt es dafür auch den gdb oder Du kannst 
ihn Dir dafür kompilieren oder Du kannst gdb remote verwenden (Google).

von bob (Gast)


Lesenswert?

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.

von Georg A. (Gast)


Lesenswert?

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.

von funky (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.