Utilisez la trace de pile d'impression GDB du fichier central

Utilisez la trace de pile d'impression GDB du fichier central
Si vous programmez depuis un moment, vous avez rencontré le terme dépotoir de noyau.

Si vous regardez la page Core Man, elle définit comme un vidage de base comme «un fichier contenant une image de la mémoire du processus au moment de la résiliation. Cette image peut être utilisée dans un débogueur (E.g.) GDB pour inspecter l'état du programme au moment où il s'est terminé ».

En termes simples, un fichier de vidage de base est un fichier qui contient des informations mémoire sur un processus lorsque le processus spécifique se termine.

Il existe diverses raisons pour lesquelles les processus peuvent s'écraser et créer un fichier de vidage de base. Ce tutoriel vous montrera comment utiliser GDB pour afficher le fichier de vidage de base et imprimer la trace de pile.

Étape 1: Obtenez un dépotoir central

Avant de commencer à analyser le fichier de vidage de base, nous devons en générer un. Pour ce faire, nous pouvons utiliser un programme de buggy.

Considérez le code buggy.C ci-dessous:

#inclure
#inclure
#inclure
int main()
int num = 0;
int * ptr = malloc (sizeof (int));
int * noptr = null;
pour (inti = 0; i<10; i++)
if (i == 5)
* noptr = i;

autre
* ptr = i;

printf ("i est% d \ n", i);

Dans le code ci-dessus, nous créons une boucle pour 0 et 10. Si la valeur de I est de 5, nous référentes un mauvais pointeur, provoquant ainsi Segfault et créant un dépotoir de base.

Clang -g bugg.c -o buggy

Maintenant, exécutez le code comme:

./petit chariot

Le code ci-dessus donnera la sortie comme suit:

I est 0
I est 1
I est 2
Je suis 3
Je suis 4
Segmentation fault (core dumped)

Étape 2: Décharge de noyau ouvert avec GDB

Pour ouvrir le fichier de vidage de noyau avec GDB, utilisez la commande GDB et passez le chemin à l'exécutable et au core vidage comme paramètres comme:

$ GDB Buggy Core

Cela lancera GDB et inclura le vidage central comme indiqué dans la sortie ci-dessous:

Pour afficher la trace de pile du fichier core, utilisez la commande backtrace:

(GDB) Backtrace

Conclusion

Ce tutoriel vous a montré comment utiliser GDB pour ouvrir un fichier de vidage de base et obtenir la trace de pile.