logo

GDB (ステップバイステップの紹介)

GDB は GNU Project Debugger の略で、C (C++ などの他の言語とともに) 用の強力なデバッグ ツールです。これは、C プログラムの実行中に内部を探索するのに役立ち、プログラムがクラッシュしたときに正確に何が起こるかを確認することもできます。 GDB は、コンパイル プロセスによって生成されるバイナリ ファイルである実行可能ファイルに対して動作します。

デモの目的で、以下の例は以下の仕様の Linux マシンで実行されます。



uname -a>
うなめ

うなめ -a

次のことをやってみましょう: –

GDBを開始する

Linux コマンド プロンプトに移動し、「gdb」と入力します。

gdb>

gdb



Javaのif-else文

Gdb オープン プロンプトは、コマンドの準備ができていることを示します。 gdb を終了するには、quit または q を入力します。

quit_gdb

やめること

コードをコンパイルする

以下は、C99 を使用してコンパイルした場合に未定義の動作を示すプログラムです。 リスト-1



注記: 自動ストレージ期間を持つオブジェクトが明示的に初期化されていない場合、その値は不定になります。不定値とは、未指定の値またはトラップ表現のいずれかです。

コードをコンパイルします。 (ここでは test.c)。 gフラグ つまり、スタック フレーム内の変数と関数の適切な名前を確認し、行番号を取得し、実行可能ファイル内をステップ実行しながらソースを確認できることを意味します。 -std=C99 フラグ 標準 C99 を使用してコードをコンパイルすることを意味します。 -o フラグ ビルド出力を出力ファイルに書き込みます。

gcc -std=c99 -g -o test test.C>

gcc -std=c99 -g -o テストテスト.C

生成された実行可能ファイルを使用して GDB を実行する

次のコマンドを入力して、コンパイルされた実行可能ファイルで GDB を起動します。

gdb ./test>

gdb ./テスト

便利な GDB コマンド:

GDB を使い始めるのに役立つコマンドをいくつか紹介します。

指示 説明
実行またはr プログラムを最初から最後まで実行します。
ブレークまたはB 特定の行にブレークポイントを設定します。
無効にする ブレークポイントを無効にします
有効にする 無効になっているブレークポイントを有効にします。
次またはn 関数に飛び込むことなく、コードの次の行を実行します。
ステップ 次の命令に進み、関数に入ります。
リストまたはl コードを表示します。
印刷または p 変数の値を表示します。
やめるかq GDB を終了します。
クリア すべてのブレークポイントをクリアします。
続く 通常の実行を継続します

コードを表示する

次に、gdb プロンプトで「l」と入力してコードを表示します。

ブレークポイント

コードを表示する

ブレークポイントを設定する

5 行目などにブレークポイントを導入しましょう。

info_b

ブレークポイントを設定する

別の行にブレークポイントを置きたい場合は、「b」と入力します。 行番号 デフォルトでは list または l は最初の 10 行のみを表示します。

ブレークポイントを表示する

ブレークポイントを表示するには、「info b」と入力します。

無効にする

ブレークポイントを表示する

ブレークポイントを無効にする

上記の作業を行った後、気が変わって元に戻したいとします。 b.「無効」と入力します。

有効-1

ブレークポイントを無効にする

無効になったブレークポイントを再度有効にする

青い丸で囲ったように、Enb は無効の n になります。 9. 最近無効にしたブレークポイントを再度有効にします。 b. 「enable」と入力します。

ファーストラン

無効になったブレークポイントを再度有効にする

Javaの個別の文字列

コードを実行する

run または r と入力してコードを実行します。ブレークポイントを設定していない場合、run コマンドは単にプログラム全体を実行します。

プリント値_x

コードを実行する

変数値を出力する

変数の値を確認するには、「print」と入力します。 変数名 またはp 変数名

変数値を出力する

上記は、実行時に x に格納される値を示しています。

変数値を変更する

gdb の変数の値を変更し、変更された値で実行を続行するには、「set」と入力します。 変数名

デバッグ出力

以下のスクリーンショットは、出力としてガベージ値が得られた理由が非常に理解できる変数の値を示しています。を実行するたびに。 /テスト 別の出力を受け取ることになります。

演習: 最初の実行時に gdb で set x = 0 を使用して、c の出力を確認してください。

デバッグ出力

GDB には、スタック、メモリ、スレッドの調査、プログラムの操作など、コードをデバッグして理解するための方法が他にもたくさんあります。上記の例が gdb を始めるのに役立つことを願っています。

結論

この記事では、C プログラムのデバッグに使用される Linux の強力なツールである GDB (GNU Debugger) について説明しました。デバッグ情報を使用してコードをコンパイルし、GDB を実行し、ブレークポイントを設定し、変数を調べ、プログラムの動作を分析できるように、次のいくつかの手順について説明しました。また、コード検査、ブレークポイント管理、変数操作、プログラム実行制御など、効率的なデバッグと問題解決を可能にする GDB の機能についても説明しました。