Was ist der beste Weg, um Abstürze unter Linux zu analysieren?
Wir erwarten, dass wir die Software erstellen und den Tester eine Release-Version liefern. Die Tester sind möglicherweise nicht in der Lage, sich daran zu erinnern, wie der Crash reproduziert werden kann, oder der Crash kann vollständig intermittierend sein. Sie werden auch keine Entwicklungsumgebung auf ihren Maschinen haben. Die Software ist in C / C ++ geschrieben und in nativen Maschinencode für die Verteilung kompiliert.
Ich glaube, wonach Sie suchen: Wie erstelle ich einen Stacktrace, wenn meine gcc C ++ App abstürzt
Wenn Sie Speicherplatz auf der Festplatte haben, lassen Sie die Anwendung ihren Coredump erstellen, wenn sie abstürzt.
%Vor%Später können Sie es mit GDB debuggen.
Abgesehen von Coredump und Stacktracing wie bereits erwähnt - stellen Sie sicher, dass Sie leicht erkennen können, welche Versionen Ihrer ausführbaren Dateien ausgeführt werden und welche Version jeder Quelldatei in welche binäre Version passt (dh, verbringen Sie etwas Zeit mit Ihrer Quellcode-Kontrollsystem und Ihre Build-Skripte). Sonst hilft weder eine Core-Datei noch ein Stack-Trace.
Core Dumps sind hilfreich, aber sie sagen nicht immer alles, was Sie darüber wissen möchten, wie Sie in den Fehlerzustand geraten sind.
Das Protokollieren von Aktionen, Eingaben und Ereignissen kann sehr hilfreich sein. Wenn Sie in der Lage sind, jeden Lauf Ihres Programms so zu protokollieren, dass im Falle eines Absturzes ein Entwickler Zugriff auf das Protokoll erhalten und den Fehler neu generieren könnte, könnte dies sehr hilfreich sein.
Wenn möglich, sollten Sie Ihre Programme mit den maximal erzeugten Debug-Symbolen erstellen und sie dann entfernen, wenn Sie Ihre Release-Versionen nicht haben wollen oder können, sondern eine Kopie jeder freigegebenen Version mit den Debug-Symbolen behalten Sie können mit der Core-Datei koppeln, wenn Sie einen Absturz debuggen müssen.
Zusätzlich zu erzeugt man einen Stacktrace in a SIGSEGV
Handler und / oder Erzeugen eines Core Dumps Es kann auch nützlich sein, wo zu finden Nicht erfasste C ++ - Ausnahme wird ausgelöst .