GNU/Linux >> Belajar Linux >  >> Linux

Cara menginstal gdb di RHEL 8

Gdb atau GNU Project Debugger adalah alat yang hebat ketika Anda perlu men-debug sebuah program. Anda dapat menyetel titik henti sementara, mengamati perubahan nilai variabel, atau bahkan mengubah nilai program saat dihentikan pada suatu titik statusnya, lalu melanjutkan, hanya untuk memilih beberapa fitur gdb.

Dalam tutorial ini kita akan menginstal gdb pada RHEL 8, dan menguji cara kerjanya dengan aplikasi C sederhana.

Dalam tutorial ini Anda akan mempelajari:

  • Cara memasang gdb
  • Cara mengkompilasi aplikasi C sederhana dengan simbol debug
  • Cara menyetel breakpoint di aplikasi yang sedang berjalan dengan gdb
  • Cara mencetak nilai aktual dari variabel yang diberikan dalam aplikasi

Melangkah melalui for loop dengan gdb.

Persyaratan dan Konvensi Perangkat Lunak yang Digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, Konvensi, atau Versi Perangkat Lunak yang Digunakan
Sistem Red Hat Enterprise Linux 8
Perangkat Lunak gdb 8.2
Lainnya Akses istimewa ke sistem Linux Anda sebagai root atau melalui sudo perintah.
Konvensi # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ – membutuhkan perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa

Cara menginstal gdb di Redhat Linux 8 petunjuk langkah demi langkah

Untuk tutorial ini, kita akan menggunakan aplikasi C sederhana yang menyetel beberapa variabel, mencetak beberapa teks, dan mengubah nilai variabelnya nanti. Itu dibuat hanya untuk menampilkan beberapa fitur gdb , dan tidak memiliki penggunaan dunia nyata.

Jika Anda tidak terbiasa dengan bahasa pemrograman C, Anda dapat melihat pengembangan C di Pengantar Linux untuk memulai. Untuk saat ini perhatikan source code berikut, yang akan kita masukkan ke dalam vars.c berkas teks:

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

Kami akan menggunakan program sederhana ini untuk menguji gdb . Anda mungkin memperhatikan dari kode bahwa variabel nilai i dan j take tidak akan pernah terekspos dalam menjalankan program secara normal, jadi kita tidak akan tahu apa nilainya di mana, dan kapan. Dalam hal ini hanya membuang-buang memori, tetapi pikirkan tentang kasus penggunaan di mana i akan menyimpan sesuatu yang penting, mungkin kata sandi hard-code, kode cheat, atau harta lainnya (atau tidak dapat menemukan di mana kesalahan perhitungan program Anda).

  1. gdb adalah bagian dari Development Tools grup paket, jadi jika Anda telah menginstal alat Pengembangan, Anda sudah memiliki gdb. Jika tidak, Anda dapat menginstalnya sendiri:
    # dnf install gdb

    Kami juga memerlukan debuginfo untuk glibc untuk pengujian kami:

    # dnf debuginfo-install glibc-2.28-18.el8.x86_64
  2. Kami mendapatkan alat debugger, dan kami mendapatkan kode sumbernya. Agar debugging berguna, kita perlu mengkompilasi program kita dengan simbol debug (kita tambahkan -g opsi):
    $ gcc -g -o vars vars.c

    Jika kita menjalankan vars program, itu akan menampilkan string di printf baris, tetapi tidak akan menyebutkan i dan j , seperti yang diharapkan.

    $ ./vars 
    Variables set
    Variable values modified
  3. Kita perlu mengetahui nilai i dan j ketika mereka pertama kali diatur, dan sebelum program keluar. Pertimbangkan baris #7 dan #10 (printf baris) di sumbernya. Akan ideal jika kita dapat menghentikan eksekusi pada baris tersebut, mendapatkan nilainya, lalu melepaskan program lagi, dll. Kita akan melakukan ini untuk menguji gdb . Kami memulainya dengan vars yang dikompilasi dapat dieksekusi sebagai argumen:
    $ 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 membaca simbol dalam program, dan memberi kita petunjuk untuk bertindak. vars program tidak dimulai pada saat ini. Kami memeriksa catatan kami, dan menetapkan breakpoint pada baris #7:

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

    Dan baris #10:

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

    Dengan set breakpoint, kita memulai eksekusi:

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

    Eksekusi berhenti pada breakpoint pertama, dan kita dapat mencetak nilai dari variabel tersembunyi:

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

    Kami mendapat bagian pertama dari informasi yang dibutuhkan, mari kita lanjutkan eksekusi:

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

    Kita dapat mencetak nilai dengan cara yang sama pada breakpoint berikutnya:

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

    Kami mendapatkan semua yang kami butuhkan. Tidak ada lagi breakpoint yang tersisa, sehingga aplikasi akan keluar secara normal setelah mencetak baris teks terakhir.

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

    Kami mendapatkan nilai dari variabel rahasia, dan menguji bahwa gdb . kami berguna seperti yang seharusnya.


Linux
  1. Cara menginstal phpMyAdmin di RHEL 8 / CentOS 8

  2. Cara Menginstal P7Zip di RHEL 8 / CentOS 8

  3. cara menginstal gcc 4.9.2 di RHEL 7.4

  1. Cara menginstal ntfs-3g di RHEL 8 / CentOS 8

  2. Cara Menginstal PHP-mbstring di RHEL 8 / CentOS 8

  3. Cara menginstal phantomjs di RHEL 8 / CentOS 8

  1. Cara menginstal Dropbox di RHEL 8 / CentOS 8

  2. Cara memasang kompas di RHEL 8 / CentOS 8

  3. Cara Memasang Wayang di RHEL 8 / CentOS 8