Linux/gdb
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
] [
リンク元
]
開始行:
*はじめに [#wfe348b5]
先日,会社の同僚と話していた時のこと.
>「えっ,gdb ってソースコードデバッグできるのか!!」
という同僚のセリフを聞いてショックを受けました.
アセンブラレベルでのデバッグしかできないと思ってたようで...
というわけで,「はじめての gdb」あたりのようなことを書い...
*デバッガで何ができるのか [#v88ef46d]
そもそも「デバッガってなに?おいしいの?」というような向...
**プログラムのデバッグ [#sa3db77f]
debug-ger という名前のとおりの使い方です.
プログラムを作っている時にその プログラムを実行させてみて...
**プログラムの解析 [#qa2c292b]
他人が作ったプログラムの場合には,「とりあえず実行させて...
*例 [#k8826b6c]
http://jr0bak.homelinux.net/~imai/linux/jdmouse-2.0.0.tar...
*コンパイル [#h6295933]
gcc を呼び出す時に -g オプションを付けてコンパイルします.
つまり,コマンドラインから gcc を直接実行する場合は
$ gcc -g foo.c
のようにします.
Makefile では
CFLAGS += -g
という行を追加してやれば OK です.
ちなみに,jdmouse の Makefile では既にこのオプションが追...
そのまま make してみましょう.
src ディレクトリの下に xzoom という実行プログラムが出来上...
*gdb の起動 [#of390254]
xzoom をターゲットプログラムとして gdb を起動します.
src ディレクトリに降りて
$ gdb xzoom
と入力してみましょう.
$ gdb xzoom
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public ...
welcome to change it and/or distribute copies of it unde...
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show war...
This GDB was configured as "i386-linux"...Using host lib...
tls/libthread_db.so.1".
(gdb)
と,gdb のプロンプトが表示されます.
この状態では,ターゲットプログラムは,まだ実行されていま...
*プログラムの表示 [#r162ae43]
list コマンドを使用します.
(gdb) list
26 int fd;
27 int key = KEY_KPPLUS;
28 const int codetable[] = { KEY_RIGHTCTRL,
29 KEY_RIGHTALT,
30 KEY_KPPLUS,
31 KEY_KPMINUS,
32 -1 };
33
34 /* argument check */
35 if ( argc == 2 ) {
えーと,これは main() 関数の先頭ですね.
引数に関数名を指定すると,その関数(のちょっと手前)から...
(gdb) list usage
12 #include "uinput.h"
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 void usage ( void )
17 {
18 fprintf ( stderr,
19 "xzoom: zoom/unzoom X screen.\n"
20 "\n"
21 "usage: xzoom [+|-]\n" );
*ブレークポイント [#k12ac9c4]
「デバッガ上でのプログラムの実行がそこに差しかかったら,...
このようなポイントをブレークポイントと呼びます.
で,このブレークポイントの設定のしかたは簡単.
まず,list コマンドで,調べたい関数を表示します.
(gdb) list usage
12 #include "uinput.h"
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 void usage ( void )
17 {
18 fprintf ( stderr,
19 "xzoom: zoom/unzoom X screen.\n"
20 "\n"
21 "usage: xzoom [+|-]\n" );
そして
(gdb) break 18
と入力すると
Breakpoint 1 at 0x8048506: file xzoom.c, line 18.
と表示され,ブレークポイントの1番に設定されます.
また,
(gdb) break usage
Note: breakpoint 1 also set at pc 0x8048506.
Breakpoint 2 at 0x8048506: file xzoom.c, line 18.
のように,関数名を指定すると,関数の先頭にブレークポイン...
(ここで Note: と出ているのは,同じ場所に2つのブレークポ...
現在設定されているブレークポイントの一覧を確認するには
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048506 in usage at xzoom...
2 breakpoint keep y 0x08048506 in usage at xzoom...
でできます.
既に設定されているブレークポイントの削除は
(gdb) delete 1
で,1番のブレークポイントが削除されます.
*ターゲットプログラムの実行 [#t347bcf7]
run コマンドでターゲットプログラムを実行します.
run コマンドの引数は,ターゲットプログラムへ引数として渡...
つまり
(gdb) run -h
と入力すると,この例の場合では
$ xzoom -h
と引数を指定されたのと同等です.
それでは,実行してみましょう.
(gdb) run -h
Starting program: /home/imai/jdmouse-2.0.0/src/xzoom -h
Breakpoint 1, usage () at xzoom.c:18
18 fprintf ( stderr,
先ほど指定したブレークポイントで実行が中断されました.
(今日はここまで)
終了行:
*はじめに [#wfe348b5]
先日,会社の同僚と話していた時のこと.
>「えっ,gdb ってソースコードデバッグできるのか!!」
という同僚のセリフを聞いてショックを受けました.
アセンブラレベルでのデバッグしかできないと思ってたようで...
というわけで,「はじめての gdb」あたりのようなことを書い...
*デバッガで何ができるのか [#v88ef46d]
そもそも「デバッガってなに?おいしいの?」というような向...
**プログラムのデバッグ [#sa3db77f]
debug-ger という名前のとおりの使い方です.
プログラムを作っている時にその プログラムを実行させてみて...
**プログラムの解析 [#qa2c292b]
他人が作ったプログラムの場合には,「とりあえず実行させて...
*例 [#k8826b6c]
http://jr0bak.homelinux.net/~imai/linux/jdmouse-2.0.0.tar...
*コンパイル [#h6295933]
gcc を呼び出す時に -g オプションを付けてコンパイルします.
つまり,コマンドラインから gcc を直接実行する場合は
$ gcc -g foo.c
のようにします.
Makefile では
CFLAGS += -g
という行を追加してやれば OK です.
ちなみに,jdmouse の Makefile では既にこのオプションが追...
そのまま make してみましょう.
src ディレクトリの下に xzoom という実行プログラムが出来上...
*gdb の起動 [#of390254]
xzoom をターゲットプログラムとして gdb を起動します.
src ディレクトリに降りて
$ gdb xzoom
と入力してみましょう.
$ gdb xzoom
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public ...
welcome to change it and/or distribute copies of it unde...
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show war...
This GDB was configured as "i386-linux"...Using host lib...
tls/libthread_db.so.1".
(gdb)
と,gdb のプロンプトが表示されます.
この状態では,ターゲットプログラムは,まだ実行されていま...
*プログラムの表示 [#r162ae43]
list コマンドを使用します.
(gdb) list
26 int fd;
27 int key = KEY_KPPLUS;
28 const int codetable[] = { KEY_RIGHTCTRL,
29 KEY_RIGHTALT,
30 KEY_KPPLUS,
31 KEY_KPMINUS,
32 -1 };
33
34 /* argument check */
35 if ( argc == 2 ) {
えーと,これは main() 関数の先頭ですね.
引数に関数名を指定すると,その関数(のちょっと手前)から...
(gdb) list usage
12 #include "uinput.h"
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 void usage ( void )
17 {
18 fprintf ( stderr,
19 "xzoom: zoom/unzoom X screen.\n"
20 "\n"
21 "usage: xzoom [+|-]\n" );
*ブレークポイント [#k12ac9c4]
「デバッガ上でのプログラムの実行がそこに差しかかったら,...
このようなポイントをブレークポイントと呼びます.
で,このブレークポイントの設定のしかたは簡単.
まず,list コマンドで,調べたい関数を表示します.
(gdb) list usage
12 #include "uinput.h"
13 #include <stdio.h>
14 #include <stdlib.h>
15
16 void usage ( void )
17 {
18 fprintf ( stderr,
19 "xzoom: zoom/unzoom X screen.\n"
20 "\n"
21 "usage: xzoom [+|-]\n" );
そして
(gdb) break 18
と入力すると
Breakpoint 1 at 0x8048506: file xzoom.c, line 18.
と表示され,ブレークポイントの1番に設定されます.
また,
(gdb) break usage
Note: breakpoint 1 also set at pc 0x8048506.
Breakpoint 2 at 0x8048506: file xzoom.c, line 18.
のように,関数名を指定すると,関数の先頭にブレークポイン...
(ここで Note: と出ているのは,同じ場所に2つのブレークポ...
現在設定されているブレークポイントの一覧を確認するには
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048506 in usage at xzoom...
2 breakpoint keep y 0x08048506 in usage at xzoom...
でできます.
既に設定されているブレークポイントの削除は
(gdb) delete 1
で,1番のブレークポイントが削除されます.
*ターゲットプログラムの実行 [#t347bcf7]
run コマンドでターゲットプログラムを実行します.
run コマンドの引数は,ターゲットプログラムへ引数として渡...
つまり
(gdb) run -h
と入力すると,この例の場合では
$ xzoom -h
と引数を指定されたのと同等です.
それでは,実行してみましょう.
(gdb) run -h
Starting program: /home/imai/jdmouse-2.0.0/src/xzoom -h
Breakpoint 1, usage () at xzoom.c:18
18 fprintf ( stderr,
先ほど指定したブレークポイントで実行が中断されました.
(今日はここまで)
ページ名:
-->