GNU/Linux >> Tutoriels Linux >  >> Linux

Comment installer gdb dans RHEL 8

Gdb ou GNU Project Debugger est un excellent outil lorsque vous devez déboguer un programme. Vous pouvez définir des points d'arrêt, surveiller le changement de valeur d'une variable ou même modifier une valeur pour le programme alors qu'il est arrêté à un point de son état, puis continuer, juste pour choisir certaines des fonctionnalités de gdb.

Dans ce didacticiel, nous allons installer gdb sur RHEL 8 et tester son fonctionnement avec une simple application C.

Dans ce didacticiel, vous apprendrez :

  • Comment installer gdb
  • Comment compiler une application C simple avec des symboles de débogage
  • Comment définir des points d'arrêt dans l'application en cours d'exécution avec gdb
  • Comment imprimer les valeurs réelles de variables données dans l'application

Parcourir une boucle for avec gdb.

Configuration logicielle requise et conventions utilisées

Configuration logicielle requise et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version du logiciel utilisée
Système Red Hat Enterprise Linux 8
Logiciel gdb 8.2
Autre Accès privilégié à votre système Linux en tant que root ou via le sudo commande.
Conventions # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande
$ – nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié

Comment installer gdb dans Redhat Linux 8 instructions étape par étape

Pour ce didacticiel, nous utiliserons une application C simple qui définit certaines variables, imprime du texte et modifie ultérieurement les valeurs de ses variables. Il est construit uniquement pour montrer certaines fonctionnalités de gdb , et n'a aucune utilisation dans le monde réel.

Si vous n'êtes pas familier avec le langage de programmation C, vous pouvez consulter le développement C sur Linux Introduction pour vous aider à démarrer. Pour l'instant, considérons le code source suivant, que nous allons mettre dans le vars.c fichier texte :

#include <stdio.h>

int main()
{
    int i = 1;
    int j = 10;
    printf("Variables set\n)";
    i++;
    j = 20;
    printf("Variable values modified\n");
    return 0;
}

Nous allons utiliser ce programme simple pour tester gdb . Vous pouvez remarquer dans le code que les variables de valeurs i et j take ne sera jamais exposé dans le cadre de l'exécution normale du programme, nous ne saurons donc pas quelles sont leurs valeurs, où et quand. Dans ce cas, il s'agit d'un simple gaspillage de mémoire, mais pensez à un cas d'utilisation où i contiendrait quelque chose d'important, peut-être un mot de passe codé en dur, un code de triche ou un autre trésor (ou ne peut tout simplement pas trouver où les calculs de votre programme se trompent).

  1. gdb fait partie des Development Tools groupe de packages, donc si vous avez installé les outils de développement, vous avez déjà gdb. Sinon, vous pouvez l'installer tout seul :
    # dnf install gdb

    Nous aurons également besoin de debuginfo pour la glibc pour nos tests :

    # dnf debuginfo-install glibc-2.28-18.el8.x86_64
  2. Nous avons obtenu l'outil de débogage et nous avons obtenu le code source. Pour que le débogage soit utile, nous devons compiler notre programme avec des symboles de débogage (nous ajoutons le -g option):
    $ gcc -g -o vars vars.c

    Si nous exécutons nos vars programme, il affichera les chaînes dans le printf lignes, mais ne mentionnera pas i et j , comme prévu.

    $ ./vars 
    Variables set
    Variable values modified
  3. Nous devons connaître les valeurs de i et j lorsqu'ils ont été définis pour la première fois et avant la fermeture du programme. Considérez les lignes #7 et #10 (le printf lignes) dans la source. Ce serait idéal si nous pouvions arrêter l'exécution à ces lignes, obtenir les valeurs, puis relâcher le programme, etc. Nous ferons exactement cela pour tester gdb . Nous le commençons avec les vars compilés exécutable comme argument :
    $ gdb vars
    GNU gdb (GDB) Red Hat Enterprise Linux 8.2-3.el8
    Copyright (C) 2018 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Type "show copying" and "show warranty" for details.
    This GDB was configured as "x86_64-redhat-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
        <http://www.gnu.org/software/gdb/documentation/>.
    
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from vars...done.
    (gdb)

    gdb lit les symboles dans le programme et nous invite à agir. Les vars le programme n'est pas lancé à ce stade. Nous vérifions nos notes et définissons un breakpoint à la ligne #7 :

    (gdb) break 7
    Breakpoint 1 at 0x40059c: file vars.c, line 7.

    Et la ligne 10 :

    (gdb) break 10
    Breakpoint 2 at 0x4005b1: file vars.c, line 10.

    Une fois les points d'arrêt définis, nous commençons l'exécution :

    (gdb) run
    Starting program: /tmp/devel/vars 
    
    Breakpoint 1, main () at vars.c:7
    7           printf("Variables set\n");

    L'exécution s'arrête au premier point d'arrêt, et nous pouvons imprimer les valeurs des variables cachées :

    (gdb) print i
    $1 = 1
    (gdb) print j
    $2 = 10

    Nous avons obtenu la première partie des informations nécessaires, continuons l'exécution :

    (gdb) continue
    Continuing.
    Variables set
    
    Breakpoint 2, main () at vars.c:10
    10          printf("Variable values modified\n");

    Nous pouvons imprimer les valeurs de la même manière au prochain point d'arrêt :

    (gdb) print i
    $3 = 2
    (gdb) print j
    $4 = 20

    Nous avons tout ce dont nous avions besoin. Il ne reste plus de points d'arrêt, donc l'application se fermera normalement après l'impression de la dernière ligne de texte.

    (gdb) continue
    Continuing.
    Variable values modified
    [Inferior 1 (process 2330) exited normally]
    (gdb) q

    Nous avons obtenu les valeurs des variables secrètes et testé que notre gdb est aussi utile qu'il est censé l'être.


Linux
  1. Comment installer phpMyAdmin sur RHEL 8 / CentOS 8

  2. Comment installer P7Zip sur RHEL 8 / CentOS 8

  3. Comment installer ntfs-3g sur RHEL 8 / CentOS 8

  4. Comment installer PHP-mbstring sur RHEL 8 / CentOS 8

  5. comment installer gcc 4.9.2 sur RHEL 7.4

Comment installer Spark sur RHEL 8

Comment installer ActiveMQ sur RHEL 8

Comment installer apache bench sur RHEL 8

Comment installer Cassandra sur RHEL 8

Comment installer composer sur RHEL 8

Comment installer kafka sur RHEL 8