Gdb は、C プログラムのデバッグに不可欠なツールです。
ブレークポイントは、特定の行、関数、またはアドレスでプログラムの実行を停止または一時停止するよう GDB に指示する方法です。プログラムが停止したら、変数値を調べて変更したり、そのブレークポイントからプログラムの実行を続行したりできます。
GDB を初めて使用する場合は、まず C のデバッグ方法の基本を理解する必要があります。 GDB を使用したプログラム。
このチュートリアルでは、次のコードを使用して gdb ブレークポイントを例とともに説明します。
#include <stdio.h> int power(int,int); int main() { int i; printf("Program to calculate power\n"); for (i=0;i<10;i++) printf("%d %d\n",i, power(2,i)); return 0; } int power (int base, int n) { int i,p; p=1; for (i=1; i<=n; i++) p = p*base; return p; } # cc -g power.c
これで、基数 2 のべき乗を 0 ~ 9 から計算する実行可能ファイルができました。
1.関数にブレークポイントを設定する方法
# gdb (gdb) file ./a.out Reading symbols from /home/lakshmanan/a.out...done. (gdb) b power Breakpoint 1 at 0x40055d: file power.c, line 16. (gdb) run Starting program: /home/lakshmanan/./a.out Program to calculate power Breakpoint 1, power (base=2, n=0) at power.c:17 17 p=1;
関数のパワーにブレークポイントを設定し、プログラムを実行します。プログラムは、power() への関数呼び出しまで実行を続けます。関数が検出されると、プログラムは停止します。
2.関数に渡された引数に関する情報を取得
関数に渡された引数を知るには、'info args' を使用してください。
(gdb) info args base = 2 n = 0
3.ローカル変数に関する情報を取得
この関数 (現在のスタック フレーム) 内でアクセス可能なローカル変数に関する情報を知るには、「info locals」を使用します。
(gdb) info locals i = 32767 p = -7840
4.次のブレークポイントまでプログラムの実行を継続
次のブレークポイントが発生するまでプログラムを続行するには、「continue」を使用します。
(gdb) continue Continuing. 0 1 Breakpoint 1, power (base=2, n=1) at power.c:16 16 int i=0,p=1;
「continue」を指定すると、累乗関数が実行され、結果が出力されました。 'main()' for ループから同じべき乗関数が再度呼び出されたため、プログラムは再び停止しました。
5.すべてのブレークポイントに関する情報を取得
「情報ブレークポイント」を使用して、ブレークポイントに関する情報を知ることができます。
(gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004005a7 in power at power.c:16 breakpoint already hit 2 times
これでブレークポイントが 1 つだけ設定され、ブレークポイントに関する情報が表示されます。
6.既存のブレークポイントを削除
既存のブレークポイントを削除するには、「delete breakpoints」を使用してください
(gdb) delete breakpoints 1 (gdb) info breakpoints No breakpoints or watchpoints.
これで、累乗関数に存在していたブレークポイントが削除されました。
7.一時的なブレークポイントを設定
ある時点で一度だけプログラムを停止したい場合があります。そのために一時的なブレークポイントを使用できます。一時的なブレークポイントはプログラムを 1 回だけ停止し、その後削除されます。
(gdb) tbreak power Temporary breakpoint 3 at 0x4005a7: file power.c, line 16. (gdb) info breakpoints Num Type Disp Enb Address What 3 breakpoint del y 0x00000000004005a7 in power at power.c:16 (gdb) continue Continuing. 1 2 Temporary breakpoint 3, power (base=2, n=2) at power.c:16 16 int i=0,p=1; (gdb) info breakpoints No breakpoints or watchpoints.