Linux: Wie debugge ich einen SIGSEGV? Wie kann ich die Fehlerquelle verfolgen?

7

Mein Firefox ist seit heute abgestürzt. Ich habe nichts auf dem System oder auf Firefox-Konfiguration geändert.

Ich benutze
strace -ff -o dumpfile.txt firefox
um das Problem zu verfolgen. Es ist keine große Hilfe.

Ich sehe den segfault, in zwei der generierten Prozess-Dumps, aber wie kann ich sie zu ihrer Ursache verfolgen?

Nachdem ich 10 Sekunden lang gerannt bin und 22MB Daten werden von strace generiert.

Dies ist ein Ausschnitt der Ausgabe, in dem Sie den tatsächlichen SIGSEGV in der Mitte sehen können.:

%Vor%     
ivan_ivanovich_ivanoff 21.06.2009, 13:23
quelle

2 Antworten

21

Ivan, deine wahre Frage ist "Wie debugge ich einen SIGSEGV?"

strace ist hier selten eine gute Hilfe. SIGSEGV bedeutet, dass die Anwendung versucht hat, einen Speicherort im Speicher zu dereferenzieren (auf ihn zuzugreifen), der nicht zugeordnet wurde (oder aus verschiedenen anderen Gründen nicht dereferenziert werden darf). Die Chancen stehen hoch, dass es nicht mit der Systemaufrufaktivität zusammenhängt, die strace erfasst. Um die Ursache Ihres Absturzes herauszufinden, müssen Sie zunächst verstehen, welche Adresse dereferenziert wird und welche Funktion dies versucht. Debugger ist das richtige Werkzeug für diese Aufgabe.

Folgendes müssen Sie tun:

%Vor%

dort, die zuletzt ausgeführte Anweisung analysierend und "Info Register" verwendend, sehen Sie die Adresse in Frage. Mit dem Befehl "bt" sehen Sie den Callstack. Wenn Sie den Callstack durchlaufen, werden Sie feststellen, wie die falsche Adresse berechnet wird. Einer der Schritte in dieser Adressberechnung ist die Ursache Ihres Problems.

Das Debuggen macht Spaß und das ist eine gute Gelegenheit, sich darauf einzulassen. Ein gutes Buch oder einige Online-Artikel können Ihnen dabei helfen. Google weg und viel Glück!

    
Rom 21.06.2009 19:45
quelle
7

Sie können Firefox im Debug-Modus starten mit: firefox -d gdb

Dies wird Firefox in gdb starten.

Sie können den gdb-Befehl 'run' ausführen und eine Rückverfolgung erhalten, wenn Firefox abstürzt. Dies kann schwierig sein, da firefox mit abgespeckten Bibliotheken ausgeliefert wird, die nur welche anzeigen Bibliothek und Offset der Code ist in, nicht die Funktion Namen.

Eine andere Alternative ist Firefox im Safemode zu starten: firefox -safe-mode und deaktiviere alle Plugins, die du installiert hast, bis es nicht mehr abstürzt.

Die letzte Alternative besteht darin, den Entwicklermodus von Firefox zu aktivieren und es zu senden Die Firefox-Crash-Session zum Mozilla-Server. Dann können Sie die Mozilla-Seite besuchen und sehen Sie die detaillierte Rückverfolgung Ihrer fehlgeschlagenen Firefox-Sitzung.

    
codeDr 22.06.2009 02:22
quelle

Tags und Links