Sie können den Kern mit GDB auf viele Arten verwenden, aber das Übergeben von Parametern, die an die ausführbare Datei an GDB übergeben werden sollen, ist nicht der Weg, um die Kerndatei zu verwenden. Dies könnte auch der Grund sein, warum Sie diesen Fehler erhalten haben. Sie können die Kerndatei auf folgende Weise verwenden:
gdb <executable> <core-file>
oder gdb <executable> -c <core-file>
oder
gdb <executable>
...
(gdb) core <core-file>
Wenn Sie die Core-Datei verwenden, müssen Sie keine Argumente übergeben. Das Absturzszenario wird in GDB angezeigt (geprüft mit GDB Version 7.1 auf Ubuntu).
Zum Beispiel:
$ ./crash -p param1 -o param2
Segmentation fault (core dumped)
$ gdb ./crash core
GNU gdb (GDB) 7.1-ubuntu
...
Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario
Program terminated with signal 11, Segmentation fault.
#0 __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)
Wenn Sie Parameter an die zu debuggende ausführbare Datei in GDB übergeben möchten, verwenden Sie --args
.
Zum Beispiel:
$ gdb --args ./crash -p param1 -o param2
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) r
Starting program: /home/@@@@/crash -p param1 -o param2
Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)
Manpages sind hilfreich, um andere GDB-Optionen zu sehen.
Einfache Verwendung von GDB, um Coredump-Dateien zu debuggen:
gdb <executable_path> <coredump_file_path>
Eine Coredump-Datei für einen „Prozess“ wird als „core.pid“-Datei erstellt.
Nachdem Sie in die GDB-Eingabeaufforderung gelangt sind (bei Ausführung des obigen Befehls), geben Sie Folgendes ein:
...
(gdb) where
Dadurch erhalten Sie die Informationen des Stacks, wo Sie die Ursache des Absturzes/Fehlers analysieren können.Anderer Befehl, für die gleichen Zwecke ist:
...
(gdb) bt full
Dies ist das gleiche wie oben. Üblicherweise listet es die gesamten Stack-Informationen auf (was letztendlich zur Absturzstelle führt).
Überspringen Sie einfach die Parameter. GDB braucht sie nicht:
gdb ./exe core.pid