Linuxでのgdbの一般的なデバッグコマンド

3143 ワード

Linuxの下には強力なデバッグツールgdbがあり、gdbはC、C+、D、Go、python、pascal、assemble(ANSIアセンブリ標準)などのプログラミング言語をデバッグすることができます.レッスンgdbデバッグツールの強さ.ここではgdbデバッグC言語でよく使われるコマンドについてまとめた.一般的に、GDBは主に以下の4つの方面の機能を完成することを手伝います:1、あなたのプログラムを起動して、あなたのカスタマイズの要求に従って好きなようにプログラムを実行することができます.2、デバッグされたプログラムを指定した調整のブレークポイントで止めることができます.(ブレークポイントは条件式であってもよい)3、プログラムが停止されたとき、あなたのプログラムで起こったことをチェックすることができます.4、プログラムの実行環境を動的に変更します.一、ここで最初の機能は、以下のソースプログラムコードを例に挙げる:ソースコードはtst.c
 #include  
  int func(int n) 
   { 
   int sum=0,i;
    for(i=0; i

[…Desktop] $ touch tst.c […Desktop] $ vim tst.cコンパイル生成ファイル[...Desktop]$cc-g tst.c-o tst GDBデバッグ[...Desktop]$gdb tst(gdb起動)を使用すると、GNU gdb 5.1.1 Copyright 2002 Free Software Foundation,Inc.GDB is free software,covered by the GNU General Public License,and you are welcome to change it and/or distribute copies of it certain conditionsが表示されます.Type “show copying” to see the conditions. There is absolutely no warranty for GDB. Type “show warranty” for details. This GDB was configured as"i 386-suse-linux"...次はgdbモードに入ります:(gdb)l-------->listの略語です.ソース1#include 2 3 int func(int n)4{5 int sum=0,i;6 for(i=0;i 7{8 sum+=i;9}10 return sum;(6)(gdb)---->直接車に戻ります.前回のコマンド11}12 13 14 main()15{16 int i;17 long result=0;18 for(i=1;i<=100;i++)19{20 result+=i;二、次は2番目の機能の実装breakコマンドでブレークポイントを設定します.正面にブレークポイントを設定する方法はいくつかあります.1、breakは指定関数に入ると止まります.C++ではclass::functionまたはfunction(type,type)を使用できます.で行ないます.2,breakは指定された行番号で止まります.3、break+offset break-offset現在の行番号の前または後ろのoffset行で停止します.offisetは自然数です.4,break filename:linenumソースファイルfilenameのlinenum行で停止します.5,break filename:functionはソースファイルfilenameのfunction関数の入り口で止まります.6,break*addressはプログラムが実行するメモリアドレスで停止します.7,break breakコマンドにパラメータがない場合は,次のコマンドで停止することを示す.以下に例を示す:(gdb)break 16------>ブレークポイントを設定し、ソースプログラムの16行目でBreakpoint 1 at 0 x 8048496:file tst.c, line 16. (gdb)break func------>関数func()の入口でBreakpoint 2 at 0 x 8048456:file tst.c, line 5. (gdb)info break-------->ブレークポイント情報の表示Num Type Disp Enb Address What 1 breakpoint keep y 0 x 08048496 in main at tst.c:16 2 breakpoint keep y 0x08048456 in func at tst.c:5(gdb)r-------->runの略で、実行プログラムStarting program:/home/hchen/test/tst Breakpoint 1,main()at tst.c:17 long result = 0; (gdb)n-------->単一文の実行、nextの略記for(i=1;i<=100;i+)(gdb)n result+=i;(gdb) n for(i=1; i<=100; i++) (gdb) n result += i; (gdb) c Breakpoint 2, func (n=250) at tst.c:5 5 int sum=0,i; (gdb) n for(i=1; i<=n; i++) (gdb) p i $1 = 134513808 (gdb) n sum+=i; (gdb) n 6for(i=1; i<=n; i++) (gdb) p sum $2 = 1 (gdb) n sum+=i; (gdb) p i $3 = 2 (gdb) n for(i=1; i<=n; i++) (gdb) p sum $4 = 3 (gdb) bt #0 func (n=250) at tst.c:5 #1 0x080484e4 in main () at tst.c:24 #2 0x400409ed in __libc_start_main () from/lib/libc.so.6 (gdb) finish (gdb) c Continuing. result[1-250]=31375(gdb)q 3、以下はGDB言語環境に関するいくつかのコマンドです.show languageは現在の言語環境を表示します.info frame現在の関数のプログラム言語を表示します.info source現在のファイルのプログラム言語を表示します.GDBで現在のプログラム言語が検出されない場合は、手動で現在のプログラム言語を設定することもできます.set languageコマンドを使用するとできます.以上はgdbを感性的に認識し,単純なシステムで理解したgdbにすぎない.