GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo instalar gdb en RHEL 8

Gdb o GNU Project Debugger es una gran herramienta cuando necesita depurar un programa. Puede establecer puntos de interrupción, observar el cambio de valor de una variable o incluso cambiar un valor para el programa mientras está detenido en un punto de su estado y luego continuar, solo para elegir algunas de las funciones de gdb.

En este tutorial, instalaremos gdb en RHEL 8 y probaremos cómo funciona con una aplicación C simple.

En este tutorial aprenderás:

  • Cómo instalar gdb
  • Cómo compilar una aplicación C simple con símbolos de depuración
  • Cómo establecer puntos de interrupción en la aplicación en ejecución con gdb
  • Cómo imprimir valores reales de variables dadas dentro de la aplicación

Pasando por un bucle for con gdb.

Requisitos de software y convenciones utilizadas

Cómo instalar gdb en Redhat Linux 8 instrucciones paso a paso

Para este tutorial, usaremos una aplicación C simple que establece algunas variables, imprime algún texto y cambia los valores de sus variables más adelante. Está construido solo para mostrar algunas características de gdb , y no tiene uso en el mundo real.

Si no está familiarizado con el lenguaje de programación C, puede consultar el desarrollo de C en la Introducción de Linux para comenzar. Por ahora considere el siguiente código fuente, que pondremos en vars.c archivo de texto:

#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;
}

Usaremos este sencillo programa para probar gdb . Puede notar en el código que las variables de valores i y j take nunca estará expuesto bajo la ejecución normal del programa, por lo que no sabremos cuáles son sus valores, dónde y cuándo. En este caso es un simple desperdicio de memoria, pero piense en un caso de uso donde i tendría algo importante, tal vez una contraseña codificada, un código de trucos u otro tesoro (o simplemente no puede encontrar dónde fallan los cálculos de su programa).

  1. gdb es parte de las Development Tools grupo de paquetes, por lo que si ha instalado las herramientas de desarrollo, ya tiene gdb. Si no, puede instalarlo solo:
    # dnf install gdb

    También necesitaremos debuginfo para glibc para nuestras pruebas:

    # dnf debuginfo-install glibc-2.28-18.el8.x86_64
  2. Obtuvimos la herramienta de depuración y el código fuente. Para que la depuración sea útil, necesitamos compilar nuestro programa con símbolos de depuración (agregamos el -g opción):
    $ gcc -g -o vars vars.c

    Si ejecutamos nuestras vars programa, generará las cadenas en el printf líneas, pero no mencionará i y j , como se esperaba.

    $ ./vars 
    Variables set
    Variable values modified
  3. Necesitamos saber los valores de i y j cuando se configuraron por primera vez y antes de que el programa saliera. Considere las líneas #7 y #10 (el printf líneas) en la fuente. Sería ideal si pudiéramos detener la ejecución en esas líneas, obtener los valores, luego soltar el programa nuevamente, etc. Haremos exactamente esto para probar gdb . Lo comenzamos con las vars compiladas ejecutable como argumento:
    $ 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 lee los símbolos en el programa y nos da la indicación para actuar. Las vars el programa no se inicia en este punto. Revisamos nuestras notas y establecemos un breakpoint en la línea #7:

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

    Y línea #10:

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

    Con los puntos de interrupción establecidos, comenzamos la ejecución:

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

    La ejecución se detiene en el primer punto de interrupción y podemos imprimir los valores de las variables ocultas:

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

    Obtuvimos la primera parte de la información necesaria, continuemos con la ejecución:

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

    Podemos imprimir los valores de la misma manera en el siguiente punto de interrupción:

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

    Tenemos todo lo que necesitábamos. No quedan más puntos de interrupción, por lo que la aplicación se cerrará normalmente después de imprimir la última línea de texto.

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

    Obtuvimos los valores de las variables secretas y probamos que nuestro gdb es tan útil como debe ser.


Linux
  1. Cómo instalar phpMyAdmin en RHEL 8 / CentOS 8

  2. Cómo instalar P7Zip en RHEL 8 / CentOS 8

  3. Cómo instalar ntfs-3g en RHEL 8 / CentOS 8

  4. Cómo instalar PHP-mbstring en RHEL 8 / CentOS 8

  5. cómo instalar gcc 4.9.2 en RHEL 7.4

Cómo instalar chispa en RHEL 8

Cómo instalar ActiveMQ en RHEL 8

Cómo instalar Apache Bench en RHEL 8

Cómo instalar Cassandra en RHEL 8

Cómo instalar Composer en RHEL 8

Cómo instalar kafka en RHEL 8

    Requisitos de software y convenciones de la línea de comandos de Linux
    Categoría Requisitos, convenciones o versión de software utilizada
    Sistema Red Hat Enterprise Linux 8
    Software gdb 8.2
    Otro Acceso privilegiado a su sistema Linux como root o a través de sudo comando.
    Convenciones # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando
    $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios