Hallo Joerg.
mal eine Frage ... ich habe hier eine rechenintensive Kommandozeilen-Anwendung ("nicht von mir", aber Open Source; geschrieben in C, compilierung mit dem ueblichen ./configure && make).
Unter 32-bit Linux laesst sie sich problemlos kompileren und laeuft fehlerfrei. gcc 3.2.3, Kernel 2.4.21.
Unter 64-bit Linux laesst sie sich problemlos kompileren und ... macht einen segfault, sobald eine Berechnung ausgefuehrt werden soll (= d.h. Hilfetext bei fehlendem Argument wird noch korrekt angezeigt). gcc 3.4.6, Kernel 2.6.9 x86_64.
Ich habe zwar recht viel Erfahrung in C, aber recht wenig mit "solchen" Problemen. Was waere so der erste Schritt, um der Ursache auf die Spur zu kommen?
Noch einmal erneut Kompilieren, aber dieses Mal wie folgt:
$ ./configure
$ CFLAGS=-g make
Damit kompilierst du das Programm mit Debugging-Symbolen. Und diese brauchst du auch im folgenden Schritt. Denn nachdem das Programm kompiliert wurde, startest du es wie folgt:
$ gdb ./dein_programm
Hiermit startest du das Programm im GNU-Debugger. Darin gibst du nun „run“ ein und wartest auf den Segfault. Nun kannst du durch Eingabe von „bt“ (BackTrace) die letzten Schritte einsehen. Mit Hilfe von „up“ und „down“ kannst du dich durch den Stack navigieren und mit Hilfe von „display“ Inhalte von Variablen und dergleichen inspizieren.
Du kannst (wenn du kannst) nun den Code ändern und direkt aus dem GDB heraus „make“ aufrufen. Ein erneutes „run“ startet dann von vorn.
Selbst wenn du auf diese Weise den Fehler nicht selbst finden kannst, dürfte dies zumindest genug Information für den Entwickler sein.
Einen schönen Donnerstag noch.
Gruß, Mathias
ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
debian/rules