Simple Sand Samples |
説明のないとってもシンプルなサンプルプログラム集
COBOL | awk | C言語 | D言語 | GO言語 | Lua | Vim |
bash | Perl | Gauche | Clojure | CLISP | EmacsLisp | VimScript |
tcsh | Ruby | Groovy | Java | C# | VBScript | JavaScript |
Io言語 | Python | Erlang | Scala | VB.NET | Excel/VBA | PHP |
Tcl | Haskell | OCaml | PowerShell | Windows | Unix/Linux |
Linuxコマンド > gdb GNUデバッガ
|
|
実行/終了 | |||||
r[un] [引数] | プログラム実行(初回) | ||||
q[uit] | gdbの終了 | ||||
n[ext] [回数] | ステップ実行(関数内に入らない) | ||||
s[tep] [回数] | ステップ実行(関数内に入る) | ||||
c[ontinue] [回数] | プログラム実行(2回目以降) | ||||
ブレイク | |||||
b[reak] [ファイル]行番号 | ブレイクポイント設定 | ||||
b[reak] [ファイル]関数名 | ブレイクポイント設定 | ||||
b[reak] [場所] if 条件 | 条件ブレイク設定 | ||||
i[nfo] b[reakpoints] | 全ブレイクポイント表示 | ||||
dis[able] 番号 | ブレイクポイント無効化 | ||||
en[able] 番号 | ブレイクポイント有効化 | ||||
d[elete] 番号 | ブレイクポイント削除 | ||||
d[elete] | 全ブレイクポイント削除 | ||||
変数表示 | |||||
p[rint] 変数 | 変数値表示 | ||||
p[rint]/x 変数 | 16進数表示 | ||||
p[rint]/o 変数 | 8進数表示 | ||||
disp[lay] 変数 | 変数値自動表示 | ||||
disp[lay]/x 変数 | 16進数表定 | ||||
disp[lay]/o 変数 | 8進数表示 | ||||
d[elete] d[isplay] 番号 | 自動表示削除 | ||||
ソース表示 | |||||
l[ist] ファイル:行番号 | ソース表示 | ||||
l[ist] [ファイル:]関数名 | 関数表示 | ||||
スタック | |||||
backtrace | コールスタック表示 |
main.c(サンプルCソース)
|
|
sub.h(サンプルCソース)
|
|
sub.c(サンプルCソース)
|
|
GDBでデバッグするために-gオプションでコンパイルする
$ gcc -g main.c sub.cGDB起動
$ gdb a.outGNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 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 "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /sample/a.out...done.
(gdb)
ブレイクポイント設定
(gdb) b mainBreakpoint 1 at 0x8048455: file main.c, line 7.
(gdb)
プログラムを実行する
(gdb) rStarting program: /sample/a.out
Breakpoint 1, main (argc=1, argv=0xbffffa84) at main.c:8
8 if(argc == 3){
(gdb)
引数を指定して実行する
(gdb) run 2 10The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /sample/a.out 2 10
Breakpoint 1, main (argc=3, argv=0xbffffa74) at main.c:8
8 if(argc == 3){
(gdb)
ファイル名、関数名でブレイクポイント設定
(gdb) b sub.c:powerBreakpoint 1 at 0x80484be: file sub.c, line 5.
(gdb)
ファイル名、行番号でブレイクポイント設定
(gdb) b sub.c:6Breakpoint 2 at 0x80484c2: file sub.c, line 6.
(gdb)
ブレイクポイント表示
(gdb) i bNum Type Disp Enb Address What
1 breakpoint keep y 0x08048455 in main at main.c:8
breakpoint already hit 1 time
2 breakpoint keep y 0x080484be in power at sub.c:5
3 breakpoint keep y 0x080484c2 in power at sub.c:6
(gdb)
#:
ブレイクポイント無効化
(gdb) dis 1(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep n 0x08048455 in main at main.c:8
breakpoint already hit 1 time
2 breakpoint keep y 0x080484be in power at sub.c:5
3 breakpoint keep y 0x080484c2 in power at sub.c:6
(gdb)
#:
ブレイクポイント有効化
(gdb) en 1(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048455 in main at main.c:8
breakpoint already hit 1 time
2 breakpoint keep y 0x080484be in power at sub.c:5
3 breakpoint keep y 0x080484c2 in power at sub.c:6
(gdb)
#:
ブレイクポイントを削除する
(gdb) del 1(gdb) info b
Num Type Disp Enb Address What
2 breakpoint keep y 0x080484be in power at sub.c:5
3 breakpoint keep y 0x080484c2 in power at sub.c:6
(gdb)
すべてのブレイクポイントを削除する
(gdb) dDelete all breakpoints? (y or n) y
(gdb) i b
No breakpoints or watchpoints.
(gdb)
条件ブレイク設定
(gdb) break power if x==2Breakpoint 4 at 0x80484be: file sub.c, line 5.
(gdb) i b
Num Type Disp Enb Address What
4 breakpoint keep y 0x080484be in power at sub.c:5
stop only if x==2
(gdb) run 2 10
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /sample/a.out 2 10
ソースを表示する
(gdb) l sub.c:power1 #include "sub.h"
2
3 int power(int x, int y)
4 {
5 y --;
6 if(y==0){
7 return x;
8 }else{
9 power(x*x , y);
10 }
(gdb)
GDBを終了する
(gdb) q$