GNU/Linux >> Znalost Linux >  >> Linux

Jak nainstalovat gdb v RHEL 8

Gdb nebo GNU Project Debugger je skvělý nástroj, když potřebujete ladit program. Můžete nastavit body přerušení, sledovat změnu hodnoty proměnné nebo dokonce změnit hodnotu programu, když je zastaven v určitém bodě svého stavu, a pak pokračovat a vybrat si některé funkce gdb.

V tomto tutoriálu nainstalujeme gdb na RHEL 8 a vyzkoušíme, jak funguje s jednoduchou C aplikací.

V tomto tutoriálu se naučíte:

  • Jak nainstalovat gdb
  • Jak zkompilovat jednoduchou C aplikaci se symboly ladění
  • Jak nastavit body přerušení ve spuštěné aplikaci pomocí gdb
  • Jak tisknout skutečné hodnoty daných proměnných v rámci aplikace

Krokování přes smyčku for s gdb.

Požadavky na software a použité konvence

Softwarové požadavky a konvence příkazového řádku systému Linux
Kategorie Požadavky, konvence nebo použitá verze softwaru
Systém Red Hat Enterprise Linux 8
Software gdb 8.2
Jiné Privilegovaný přístup k vašemu systému Linux jako root nebo prostřednictvím sudo příkaz.
Konvence # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz
$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel

Jak nainstalovat gdb v Redhat Linux 8 krok za krokem

V tomto tutoriálu použijeme jednoduchou C aplikaci, která nastaví některé proměnné, vytiskne nějaký text a později změní hodnoty svých proměnných. Je vytvořen pouze pro zobrazení některých funkcí gdb a nemá žádné skutečné použití.

Pokud nejste obeznámeni s programovacím jazykem C, můžete se podívat na úvod do vývoje C v Linuxu, abyste mohli začít. Prozatím zvažte následující zdrojový kód, který vložíme do vars.c textový soubor:

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

Tento jednoduchý program použijeme k testování gdb . Z kódu si můžete všimnout, že proměnné hodnot i a j take nebudou za normálního běhu programu nikdy vystaveny, takže nebudeme vědět, jaké jsou jejich hodnoty kde a kdy. V tomto případě je to jednoduché plýtvání pamětí, ale zamyslete se nad případem použití, kde i by obsahovalo něco důležitého, možná pevně zakódované heslo, cheat kód nebo jiný poklad (nebo prostě nemůžete najít, kde jsou výpočty vašeho programu špatně).

  1. gdb je součástí Development Tools package group, takže pokud jste si nainstalovali vývojové nástroje, máte již gdb. Pokud ne, můžete jej nainstalovat sám:
    # dnf install gdb

    Pro naše testy budeme také potřebovat debuginfo pro glibc:

    # dnf debuginfo-install glibc-2.28-18.el8.x86_64
  2. Máme ladicí nástroj a máme zdrojový kód. Aby bylo ladění užitečné, musíme náš program zkompilovat se symboly ladění (přidáme -g option):
    $ gcc -g -o vars vars.c

    Pokud spustíme naše vars vypíše řetězce v printf řádky, ale nezmiňuje i a j podle očekávání.

    $ ./vars 
    Variables set
    Variable values modified
  3. Potřebujeme znát hodnoty i a j při prvním nastavení a před ukončením programu. Zvažte řádky #7 a #10 (printf řádky) ve zdroji. Ideální by bylo, kdybychom mohli zastavit provádění na těchto řádcích, získat hodnoty, pak program znovu uvolnit atd. Přesně to uděláme, abychom otestovali gdb . Začneme to zkompilovaným vars spustitelný jako 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 čte symboly v programu a dává nám výzvu k akci. vars program v tomto okamžiku není spuštěn. Zkontrolujeme své poznámky a nastavíme breakpoint na řádku #7:

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

    A řádek #10:

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

    S nastavenými body přerušení zahájíme provádění:

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

    Provádění se zastaví u prvního bodu přerušení a můžeme vytisknout hodnoty skrytých proměnných:

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

    Získali jsme první část potřebných informací, pokračujeme v provádění:

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

    Hodnoty můžeme vytisknout stejným způsobem u dalšího bodu přerušení:

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

    Dostali jsme vše, co jsme potřebovali. Nezbývají žádné další zarážky, takže aplikace se po vytištění posledního řádku textu normálně ukončí.

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

    Získali jsme hodnoty tajných proměnných a otestovali naše gdb je tak užitečný, jak má být.


Linux
  1. Jak nainstalovat phpMyAdmin na RHEL 8 / CentOS 8

  2. Jak nainstalovat P7Zip na RHEL 8 / CentOS 8

  3. jak nainstalovat gcc 4.9.2 na RHEL 7.4

  1. Jak nainstalovat ntfs-3g na RHEL 8 / CentOS 8

  2. Jak nainstalovat PHP-mbstring na RHEL 8 / CentOS 8

  3. Jak nainstalovat phantomjs na RHEL 8 / CentOS 8

  1. Jak nainstalovat Dropbox na RHEL 8 / CentOS 8

  2. Jak nainstalovat kompas na RHEL 8 / CentOS 8

  3. Jak nainstalovat Puppet na RHEL 8 / CentOS 8