GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So installieren Sie gdb in RHEL 8

Gdb oder GNU Project Debugger ist ein großartiges Werkzeug, wenn Sie ein Programm debuggen müssen. Sie können Haltepunkte setzen, auf Wertänderungen einer Variablen achten oder sogar einen Wert für das Programm ändern, während es an einem Punkt seines Zustands angehalten wird, und dann fortfahren, um nur einige der Funktionen von gdb auszuwählen.

In diesem Tutorial werden wir gdb auf RHEL 8 installieren und testen, wie es mit einer einfachen C-Anwendung funktioniert.

In diesem Tutorial lernen Sie:

  • Wie installiere ich gdb
  • Wie man eine einfache C-Anwendung mit Debug-Symbolen kompiliert
  • Wie man Haltepunkte in der laufenden Anwendung mit gdb setzt
  • So drucken Sie tatsächliche Werte bestimmter Variablen innerhalb der Anwendung

Durchlaufen einer for-Schleife mit gdb.

Softwareanforderungen und verwendete Konventionen

Softwareanforderungen und Linux-Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder verwendete Softwareversion
System Red Hat Enterprise Linux 8
Software gdb 8.2
Andere Privilegierter Zugriff auf Ihr Linux-System als root oder über sudo Befehl.
Konventionen # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl
$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden

Schritt-für-Schritt-Anleitung zur Installation von gdb in Redhat Linux 8

Für dieses Tutorial verwenden wir eine einfache C-Anwendung, die einige Variablen setzt, Text ausgibt und später die Werte ihrer Variablen ändert. Es wurde nur erstellt, um einige Funktionen von gdb zu zeigen , und wird nicht in der realen Welt verwendet.

Wenn Sie mit der Programmiersprache C nicht vertraut sind, können Sie sich die Einführung in die C-Entwicklung unter Linux ansehen, um loszulegen. Betrachten Sie zunächst den folgenden Quellcode, den wir in die vars.c einfügen werden Textdatei:

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

Wir verwenden dieses einfache Programm, um gdb zu testen . Sie können anhand des Codes feststellen, dass die Wertvariablen i und j take werden im normalen Programmlauf niemals offengelegt, daher wissen wir nicht, welche Werte wo und wann sie haben. In diesem Fall ist es eine einfache Speicherverschwendung, aber denken Sie an einen Anwendungsfall, bei dem i würde etwas Wichtiges enthalten, vielleicht ein hartcodiertes Passwort, einen Cheat-Code oder einen anderen Schatz (oder kann einfach nicht finden, wo die Berechnungen Ihres Programms schief gehen).

  1. gdb ist Teil der Development Tools Paketgruppe, wenn Sie also Entwicklungstools installiert haben, haben Sie bereits gdb. Wenn nicht, können Sie es selbst installieren:
    # dnf install gdb

    Für unsere Tests benötigen wir auch debuginfo für glibc:

    # dnf debuginfo-install glibc-2.28-18.el8.x86_64
  2. Wir haben das Debugger-Tool und den Quellcode. Damit das Debuggen nützlich ist, müssen wir unser Programm mit Debug-Symbolen kompilieren (wir fügen das -g hinzu Option):
    $ gcc -g -o vars vars.c

    Wenn wir unsere vars ausführen Programm, es gibt die Strings in printf aus Zeilen, aber i wird nicht erwähnt und j , wie erwartet.

    $ ./vars 
    Variables set
    Variable values modified
  3. Wir müssen die Werte von i kennen und j wenn sie zum ersten Mal gesetzt wurden und bevor das Programm beendet wurde. Betrachten Sie die Zeilen #7 und #10 (die printf Zeilen) in der Quelle. Es wäre ideal, wenn wir die Ausführung an diesen Zeilen stoppen, die Werte abrufen und das Programm dann wieder loslassen könnten usw. Wir werden genau dies tun, um gdb zu testen . Wir beginnen es mit den kompilierten vars ausführbar als 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 liest die Symbole im Programm und gibt uns die Aufforderung zum Handeln. Die vars Programm wird zu diesem Zeitpunkt noch nicht gestartet. Wir überprüfen unsere Notizen und setzen einen breakpoint in Zeile #7:

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

    Und Zeile #10:

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

    Mit gesetzten Breakpoints starten wir die Ausführung:

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

    Die Ausführung stoppt am ersten Haltepunkt und wir können die Werte der versteckten Variablen ausgeben:

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

    Wir haben den ersten Teil der benötigten Informationen erhalten, fahren wir mit der Ausführung fort:

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

    Beim nächsten Haltepunkt können wir die Werte auf die gleiche Weise ausgeben:

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

    Wir haben alles, was wir brauchten. Es sind keine Haltepunkte mehr übrig, daher wird die Anwendung nach dem Drucken der letzten Textzeile normal beendet.

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

    Wir haben die Werte der geheimen Variablen erhalten und unsere gdb getestet ist so nützlich, wie es sein soll.


Linux
  1. So installieren Sie phpMyAdmin auf RHEL 8 / CentOS 8

  2. So installieren Sie P7Zip auf RHEL 8 / CentOS 8

  3. So installieren Sie ntfs-3g auf RHEL 8 / CentOS 8

  4. So installieren Sie PHP-mbstring auf RHEL 8 / CentOS 8

  5. wie man gcc 4.9.2 auf RHEL 7.4 installiert

So installieren Sie Spark auf RHEL 8

So installieren Sie ActiveMQ auf RHEL 8

So installieren Sie Apache Bench auf RHEL 8

So installieren Sie Cassandra auf RHEL 8

So installieren Sie Composer auf RHEL 8

So installieren Sie Kafka auf RHEL 8