GNU/Linux >> Tutoriels Linux >  >> Linux

Comment analyser le fichier core dump d'un programme avec GDB lorsqu'il a des paramètres de ligne de commande ?

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

Linux
  1. Comment rediriger la sortie d'un programme vers un fichier Zip ? ?

  2. Comment définir les paramètres lorsque Pipe Bash Script to Bash ?

  3. Comment analyser un segment d'un fichier audio avec Sox ?

  4. Lors de la lecture d'un fichier avec "moins" ou "plus", comment puis-je obtenir le contenu en couleurs ?

  5. Comment remplir un fichier avec FF en utilisant dd ?

Comment utiliser la commande Linux rm avec des exemples

Comment réparer une erreur de conversion avec Calibre

Comment recharger .bash_profile dans la ligne de commande Linux

Comment gérer les noms de fichiers avec des espaces sous Linux

Comment se fait-il qu'aucun vidage de mémoire ne soit créé lorsqu'une application a défini SUID ?

Comment définir l'emplacement (et le nom) du fichier de vidage principal ?