Vous pouvez utiliser le noyau avec GDB de plusieurs manières, mais transmettre des paramètres qui doivent être transmis à l'exécutable vers GDB n'est pas la façon d'utiliser le fichier noyau. Cela pourrait également être la raison pour laquelle vous avez cette erreur. Vous pouvez utiliser le fichier core des manières suivantes :
gdb <executable> <core-file>
ou gdb <executable> -c <core-file>
ou
gdb <executable>
...
(gdb) core <core-file>
Lorsque vous utilisez le fichier core, vous n'avez pas à passer d'arguments. Le scénario de plantage est affiché dans GDB (vérifié avec GDB version 7.1 sur Ubuntu).
Par exemple :
$ ./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)
Si vous souhaitez passer des paramètres à l'exécutable à déboguer dans GDB, utilisez --args
.
Par exemple :
$ 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)
Les pages de manuel seront utiles pour voir d'autres options GDB.
Utilisation simple de GDB, pour déboguer les fichiers coredump :
gdb <executable_path> <coredump_file_path>
Un fichier coredump pour un "processus" est créé en tant que fichier "core.pid".
Après être entré dans l'invite GDB (lors de l'exécution de la commande ci-dessus), tapez :
...
(gdb) where
Cela vous donnera les informations de la pile, où vous pourrez analyser la cause du crash/défaut.Autre commande, aux mêmes fins est :
...
(gdb) bt full
C'est la même chose que ci-dessus. Par convention, il répertorie toutes les informations de la pile (ce qui conduit finalement à l'emplacement du crash).
Ignorez simplement les paramètres. GDB n'en a pas besoin :
gdb ./exe core.pid