Linux: gewusst Wie: Debuggen eine SIGSEGV? Wie kann ich nachvollziehen, die Fehler Quelle?
Mein firefox gestartet Absturz seit heute. Ich habe nichts verändert am system oder der firefox-config.
Ich benutze
strace -ff -o dumpfile.txt firefox
um das problem aufzuspüren. Es ist keine große Hilfe.
Sehe ich die segfault, in zwei der generierten Prozess-dumps,
aber wie kann ich trace Sie Ihre Ursache?
Nach dem laufen für 10 Sekunden und Absturz,
22 MB an Daten erzeugt wird, durch strace.
Dies ist ein Ausschnitt der Ausgabe, wo Sie sehen können die tatsächlichen SIGSEGV in der Mitte.:
Lesen(19, "\372", 1) = 1 gettimeofday({1245590019, 542231}, NULL) = 0 read(3, "\6\0[Qmy\26\0\3\1\0\0Y\0\200\2\0\0\0\0\323\3A\0\323\3(\0\20\0\1\0", 4096) = 32 Lesen(3, 0xf5c55058, 4096) = -1 EAGAIN (Resource temporarily unavailable) gettimeofday({1245590019, 542813}, NULL) = 0 poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=14, events=POL Lesen(3, 0xf5c55058, 4096) = -1 EAGAIN (Resource temporarily unavailable) gettimeofday({1245590019, 543161}, NULL) = 0 gettimeofday({1245590019, 546672}, NULL) = 0 gettimeofday({1245590019, 546761}, NULL) = 0 Lesen(3, 0xf5c55058, 4096) = -1 EAGAIN (Resource temporarily unavailable) gettimeofday({1245590019, 546936}, NULL) = 0 poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=8, events=POLLIN|POLLPRI}, {fd=12, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=14, events=POL poll([{fd=3, events=POLLIN|POLLOUT}], 1, 4294967295) = 1 ([{fd=3, revents=POLLOUT}]) writev(3, [{"5\30\4\0006\21\200\2\266\n\200\2\17\0]\3\230\4\5\0007\21\200\0026\21\200\2\317\0\0\0"..., 1624}, {NULL, 0}, {"", 0}], 3) = 1624 poll([{fd=3, events=POLLIN}], 1, 4294967295) = 1 ([{fd=3, revents=POLLIN}]) read(3, "\1\30\224Q\17\17\0\0\0\0\0\0\0\0\0\0000\235\273\0\0\0\0\0o\264Q\0\0\0\0\0"..., 4096) = 4096 read(3, "\375\240f\0\376\242j\0\377\261\200\0\271a+\0\271a+\0\377\261\200\0\376\252w\0\376\250s\0"..., 11356) = 11356 Lesen(3, 0xf5c55058, 4096) = -1 EAGAIN (Resource temporarily unavailable) poll([{fd=3, events=POLLIN|POLLOUT}], 1, 4294967295) = 1 ([{fd=3, revents=POLLOUT}]) writev(3, [{"\230\32\7\0\1\21\200\2?\21\200\2\377\377\377\377\377\377\377\377\0\0\0\0\17\0\1\0015\10\4\0"..., 956}, {NULL, 0}, {"", 0}], 3) = 956 poll([{fd=3, events=POLLIN}], 1, 4294967295) = 1 ([{fd=3, revents=POLLIN}]) read(3, "\1\30\256Q\17\17\0\0\0\0\0\0\0\0\0\0000\235\273\0\0\0\0\0o\264Q\0\0\0\0\0"..., 4096) = 4096 read(3, "\375\240f\0\376\242j\0\377\261\200\0\271a+\0\271a+\0\377\261\200\0\376\252w\0\376\250s\0"..., 11356) = 11356 Lesen(3, 0xf5c55058, 4096) = -1 EAGAIN (Resource temporarily unavailable) --- SIGSEGV (Segmentation fault) @ 0 (0) --- unlink("/home/userrrr/.mozilla/firefox/mvbnkitl.default/lock") = 0 rt_sigaction(SIGSEGV, {SIG_DFL, ~[HUP INT QUIT ABRT BUS FPE KILL PIPE CHLD CONT TTOU URG XCPU WINCH RT_1 RT_2 RT_3 RT_4 RT_8 RT_11 RT_14 RT_17 RT_22], SA_NOCLDSTOP}, rt_sigprocmask(SIG_BLOCK, ~[ILL ABRT-BUS, FPE, SEGV RTMIN RT_1], ~[KILL-STOP-RTMIN RT_1], 8) = 0 open("/home/userrrr/.mozilla/firefox/mvbnkitl.default/minidumps/56b30367-5ee2-0495-32646b7f-59dc87e9.dmp", O_WRONLY|O_CREAT|O_EXCL, 0600) = 63 clone(child_stack=0xf5bfffe4, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_UNTRACED) = 18929 waitpid(18929, NULL, __WAND) = 18929 open("/proc/18913/Aufgabe", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 64 fstat64(64, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 getdents64(64, /* 12 Einträge */, 1024) = 368 ptrace(PTRACE_DETACH, 18913, 0, SIG_0) = -1 ESRCH (No such process) close(64) = 0 ftruncate(63, 91256) = 0 close(63) = 0 rt_sigprocmask(SIG_SETMASK, ~[KILL-STOP-RTMIN RT_1], ~[KILL-STOP-RTMIN RT_1], 8) = 0 time(NULL) = 1245590020 open("/home/userrrr/.mozilla/firefox/Crash Reports/LastCrash", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 63 schreiben(63, "1245590020", 10) = 10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ivan, deine eigentliche Frage ist "wie debugge ich einen SIGSEGV?"
strace ist selten eine gute Hilfe hier. SIGSEGV bedeutet, dass die Anwendung versucht, Dereferenzierung (Zugriff auf) einen Speicherort im Speicher, die, die noch nicht zugewiesen wurden (oder darf nicht aufgelöst werden, aus verschiedenen anderen Gründen). Die Chancen sind hoch, dass es ist nicht in Bezug auf das system fordert Aktivität, die strace ist die Aufnahme. Um herauszufinden, die Ursache für deinen Absturz, starten Sie durch das Verständnis, was Adresse wird dereferenziert und die Funktion versucht, das zu tun. Debugger ist das richtige Werkzeug für diese Aufgabe.
Hier ist, was Sie tun müssen:
in es, die Analyse der letzten ausgeführten Anweisung und mit "info Register" sehen Sie die Adresse in Frage. Mit dem "bt" - Befehl Sie sehen den callstack. Zu Fuß den callstack-up, werden Sie entdecken, wie die falsche Adresse ist, die berechnet wird. Einer der Schritte in diese Adresse die Berechnung ist die Ursache für dein problem.
Debugging ist Spaß und dies ist eine gute Möglichkeit, Tauchen Sie ein in ihn. Ein gutes Buch oder einige online-Artikel können Ihnen dabei helfen. Google entfernt und viel Glück!
Können Sie Start von firefox im debug-Modus mit diesem:
firefox -d gdb
dieser startet firefox innerhalb von gdb.
Können Sie das Problem der gdb-Befehl "ausführen" und erhalten Sie einen traceback, wenn firefox abstürzt.
Dies kann schwierig sein, da firefox die Schiffe mit freien Bibliotheken, die nur zeigt, welche
Bibliothek und offset des code ist, und nicht den Funktionsnamen.
Andere alternative ist, starten Sie firefox im abgesicherten Modus: firefox-safe-mode
und deaktivieren Sie alle plugins, die Sie installiert haben kann, bis es keine Abstürze mehr.
Die Letzte alternative ist das aktivieren des Entwickler-Modus von firefox, und lassen Sie es zu senden
die firefox-Absturz-Sitzung, um die mozilla-server. Dann können Sie gehen die mozilla-Website
und siehe die detaillierte Rückverfolgung Ihrer fehlgeschlagen firefox-Sitzung.