GNU/Linux >> Linux の 問題 >  >> Linux

RHEL8にgdbをインストールする方法

Gdb またはGNUProjectDebuggerは、プログラムをデバッグする必要がある場合の優れたツールです。ブレークポイントを設定したり、変数の値の変更を監視したり、プログラムがその状態の時点で停止しているときにプログラムの値を変更したりして、gdbの機能の一部を選択するだけで続行できます。

このチュートリアルでは、RHEL 8にgdbをインストールし、単純なCアプリケーションでどのように機能するかをテストします。

このチュートリアルでは、次のことを学びます。

  • gdbのインストール方法
  • デバッグシンボルを使用して単純なCアプリケーションをコンパイルする方法
  • gdbを使用して実行中のアプリケーションにブレークポイントを設定する方法
  • アプリケーション内で特定の変数の実際の値を出力する方法

gdbを使用してforループをステップスルーします。

使用されるソフトウェア要件と規則

システム ソフトウェア その他 規約
ソフトウェア要件とLinuxコマンドラインの規則
カテゴリ 使用する要件、規則、またはソフトウェアバージョン
Red Hat Enterprise Linux 8
gdb 8.2
rootまたはsudoを介したLinuxシステムへの特権アクセス コマンド。
–指定されたLinuxコマンドは、rootユーザーとして直接、またはsudoを使用して、root権限で実行する必要があります。 コマンド
$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります

RedhatLinux8にgdbをインストールする方法ステップバイステップの説明

このチュートリアルでは、いくつかの変数を設定し、いくつかのテキストを出力し、後でその変数の値を変更する単純なCアプリケーションを使用します。 gdbの一部の機能を表示するためにのみ作成されています 、実際の使用法はありません。

Cプログラミング言語に慣れていない場合は、Linuxの概要でC開発をチェックして開始できます。今のところ、vars.cに入れる次のソースコードについて考えてみましょう。 テキストファイル:

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

この単純なプログラムを使用して、gdbをテストします 。コードから、値変数iに気付くかもしれません。 およびj プログラムの通常の実行ではtakeが公開されることはないため、それらの値がどこでいつ発生するかはわかりません。この場合、それは単純なメモリの浪費ですが、iのユースケースを考えてみてください。 ハードコードされたパスワード、チートコード、その他の宝物など、重要なものが含まれている可能性があります(または、プログラムの計算がうまくいかない場所を見つけることができません)。

  1. gdb Development Toolsの一部です パッケージグループなので、開発ツールをインストールしている場合は、すでにgdbがあります。そうでない場合は、単独でインストールできます:
    # dnf install gdb

    テストにはglibcのdebuginfoも必要です:

    # dnf debuginfo-install glibc-2.28-18.el8.x86_64
  2. デバッガツールを入手し、ソースコードを入手しました。デバッグを有効にするには、デバッグシンボルを使用してプログラムをコンパイルする必要があります(-gを追加します)。 オプション):
    $ gcc -g -o vars vars.c

    varsを実行すると プログラムでは、printfの文字列を出力します 行ですが、iについては言及しません およびj 、予想どおり。

    $ ./vars 
    Variables set
    Variable values modified
  3. iの値を知る必要があります およびj それらが最初に設定されたとき、およびプログラムが終了する前。 7行目と10行目(printf)について考えてみます。 行)ソース内。これらの行で実行を停止し、値を取得してから、プログラムを再び解放するなどの方法があれば理想的です。これを正確に実行して、gdbをテストします。 。コンパイルされたvarsから始めます 引数として実行可能:
    $ 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 プログラム内の記号を読み取り、行動を促すプロンプトを表示します。 vars この時点ではプログラムは開始されていません。メモを確認し、breakpointを設定します 7行目:

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

    そして10行目:

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

    ブレークポイントを設定したら、実行を開始します:

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

    実行は最初のブレークポイントで停止し、隠れた変数の値を出力できます:

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

    必要な情報の最初の部分を取得しました。実行を続けましょう:

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

    次のブレークポイントでも同じ方法で値を出力できます:

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

    必要なものはすべて手に入れました。ブレークポイントが残っていないため、テキストの最後の行を印刷した後、アプリケーションは正常に終了します。

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

    シークレット変数の値を取得し、gdbをテストしました 本来あるべき姿と同じくらい便利です。


Linux
  1. RHEL 8 /CentOS8にphpMyAdminをインストールする方法

  2. RHEL 8 /CentOS8にP7Zipをインストールする方法

  3. RHEL 7.4 に gcc 4.9.2 をインストールする方法

  1. RHEL 8 /CentOS8にntfs-3gをインストールする方法

  2. PHP-mbstringをRHEL8/CentOS8にインストールする方法

  3. RHEL 8 /CentOS8にphantomjsをインストールする方法

  1. DropboxをRHEL8/CentOS8にインストールする方法

  2. RHEL 8 /CentOS8にコンパスをインストールする方法

  3. RHEL 8 /CentOS8にPuppetをインストールする方法