3 デバのお ”gdb ススメ


PIC
____________________________________________________________________

3.1 は じ め に

インタではプンソプログラムされていますそれらのプログラム発者によるデバ だけでなく多くのデバすることによめていきますそのデバえたプログラム いわゆるしたプログラムであり多くのして使えるレベルになるにはデバはとて 大切1 つですDebian 使プログラムデバする法についてまとめてみま した

3.2 gdb とは

gdb とは GNU Debugger*1 ことでC 言語 C++ けのスレベルデバです発者gdb 使うことでプログラムどこの部分してい るかプログラムはどうなているかをることができるためデバ率的にうことができますman gdb(1)によるとgdb にはきく 4 つの能があるとかれています

gdb 使するイル/.gdbinit”でありgdb 定値をこのイルすることででき ます

3.3 発環gdb インスト

C 言語プログラム発するためにはコンパイラ必要ですgdb 他にプログラムするために必要ソフトウ インストします

$ sudo apt-get update
$ sudo apt-get install gcc make
$ sudo apt-get install gdb

たところでプログラムしますFizzBuzz *2といわ れているプログラムにしてみます

3.4 gdb 使てみまし

3.4.1 まずはデバグビルドします

プログラムgdb するためにはプログラムデバ与してビルドする必要がありますgcc コンパイルオ プシビルドオプシデバグシンボル与する”-g”オプシをつけてビルドしますデバ適化 ベル発者にようこともありますここでは適化レベル無指(=”-O0”適化なし) としてビルド ます。 )

3.4.2 gdb 単体プログラムいかけてみる

それではから gdb 動しますgdb 動すると以下のようなになります

$ gdb
GNU gdb 6.8-debian
Copyright (C) 2008 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 "x86_64-linux-gnu".
(gdb)

gdb プロンプトコマンドすることによりデバしてプログラム動かすことができますデバでよ 使gdb コマンド 3.1します



3.1: gdb するコマンド (抜粋)



コマンド 略コマンド







run () r

プログラムからします

するrun します




break () b

ブレクポイントしますブレクポイント 名」 スコ:のいずれかでできます




delete (breakpoint ) d

ブレクポイントします単に delete だけをする とすべてのブレクポイントします




list l

現在くのスコをある表示します( 定値10 )




step s

ステプインします




next n

ステプオします




finish fin

ステプアウトします




continue c

現在からプログラムします




print () p

プログラム() 表示しますポインタ print *ポインタ名」 することでポイン 表示できます




set var ()=(定値) なし

プログラム() (定値) します




quit q

gdb 了します




attach (プロセス ID) なし

(プロセス ID) gdb できるようにします




detach なし

attach プロセスgdb から離します 離されたプログラムはそのまま動作続けます




shell なし

shell 動しますshell exit すると gdb プロンプト ります




help h

gdb コマンドするヘルプ表示します




info (コマンド) i

表示します





3.5 gdb フロントエンドツ

gdb 単体でも分デバ能ですがよりデバいやすいように gdb フロントエンドツ 多くありますX Window System 動作する発環(IDE) では KDevelopAnjutaEclipse NetBeans などコマンドラインでも動作する EmacsVim などもフロントエンドとして利用することができ ます

3.5.1 Emacs GUD gdb 使てみる

Emacs には GUD(Grand Unified Debugger) という能がありEmacs デバ連携することができる ですGUD gdb らずperldb(perl デバ) pdb(python デバ) なども動することができ ます

Emacs 以下して gdb 動します

M-x gdb

そのミニバイルして Enter します

Run gdb (like this): gdb --annotate=3 ../a.out

すると 3.2 3.3のようなわります


PIC

3.2: Emacs GUD gdb 動した(1)



PIC

3.3: Emacs GUD デバ(2)


またEmacs イル/.emacs.el”(setq gdb-many-windows t)しておくとすると 3.4 3.5 ようなgdb 動しますこの表示するにはgud.elというイル必要でありlenny Emacs インストするとインストされます


PIC

3.4: Emacs GUD gdb 動した(3)



PIC

3.5: Emacs GUD デバ(4)


3.6 いろいろなプログラムデバ方法

プログラムgdb 使デバするときのげてみます

3.6.1 単発実プログラムデバ

単発実するプログラムデバプログラム動をそのデバすることになり ます

  1. gdb 動します
  2. break コマンドブレクポイントします(にはb mainしてプログラムめる ことも多いです)
  3. run コマンドプログラムします
  4. step コマンドnext コマンドプログラムいかけます
  5. デバ了したらcontinue コマンドりのプログラムすべてをします
  6. quit コマンドgdb 了します
3.6.2 モンプログラムデバ

モンとして動作しているプログラム動作プログラムgdb する必要があるためアタする必要 あります

  1. デバするモンプログラムします
  2. デバするモンプロセスプロセス ID 調べます
  3. gdb 動します
  4. プロセス ID して attach コマンドデバするモンプロセスアタします
  5. break コマンドブレクポイントします(おそらく無限のどこかでさせることになる います)
  6. ブレクポイントしたところでプログラムしますのでstep コマンドnext コマンド してプログラムいかけます
  7. デバ了したらdetach コマンドプロセスからデタします
  8. quit コマンドgdb 了します
3.6.3 fork するプログラムデバ

fork するプログラムfork() プロセスプロセスのどちらをいかけるのかをset follow-fork-mode parent などとしておく必要があります

  1. gdb 動します
  2. set follow-fork-modefork() デバプロセスプロセスにするかプロセス するかします
  3. break コマンドブレクポイントします
  4. run コマンドプログラムします
  5. fork() したset follow-fork-modeしたプロセスプロセスのいずれかをしますのでそ のまま続けてデバします
  6. quit コマンドプログラム了します

3.7 まとめ

gdb Emacs GUD においてプログラムデバするしましたEmacs GUD 使 デバX Window System だけでなくコンソでも同様できるためtelnet ssh でも同じスタイルプログラムデバうことができます

みなさんも Debian 使てたくさんデバしてみまし

3.8

28 回関西 Debian 2009 10
____________________________________________________________________________________________