gdbの初歩

gdbとはデバッガー(デバッグ作業を支援するソフト)の一種である。たいていのlinuxには最初からインストールされている。

最も簡単な使用法

1. -gオプションをつけてプログラムをコンパイルする (gfortran, ifortなどは-gオプションを使う。他のコンパイラについてはマニュアルを参照のこと)

2. gdbを起動する

$ gdb 実行ファイル名

3. gdb上でプログラムを実行する

(gdb) r

4.gdbの終了

(gdb) q

使用例

1. -gオプションをつけてプログラムをコンパイルする

[Thu Jan 6 14:28:42 JST 2011]

[aym@aofd30 processor=x86_64]

[~/11.Work10/15.HeatBudjet/51.jcope2/31.monthly_mean_and_anomaly/src]

$ make

ifort -c -CB -traceback -fpe0 -g -O3 -convert big_endian -module ../obj -c -o ../obj/jcmldcut.o jcmldcut.f90

ifort -o ../jcmldcut ../obj/param.o ../obj/julday.o ../obj/caldat.o ../obj/uv2sp.o ../obj/eqst2.o ../obj/jcmldcut.o ../obj/sigma_theta.o ../obj/sigma_theta_10m.o ../obj/mixed_layer_depth.o ../obj/mixed_layer_temp.o ../obj/outdeg.o ../obj/print_header.o -module ../obj

2. gdbを起動する

$ gdb jcmldcut

3. gdb上でプログラムを実行する

(gdb) r

中略

[Thread debugging using libthread_db enabled]

Prog.: jcmldcut

iwest,ieast= 125 300

jsouth,jnorth= 125 325

imcut= 176

jmcut= 201

Detaching after fork from child process 23636.

date: 20091231

### read(U_) um80 2009 12 31 180

### read(V_) vm80 2009 12 31 180

### read(T_) tm80 2009 12 31 180

### read(S_) sm80 2009 12 31 180

tbias,sbias= 10.00000 35.00000

Program received signal SIGFPE, Arithmetic exception.

eqst2 (p=0, t=9.3764152526855469, s=-0.40771484375, rho=999.97619482160917)

at eqst2.f:101

101 & + (c0 + c1*t + c2*t**2)*s**(1.5)

eqst2.fというファイルの101行目で、sの値がマイナスなのに、sの1.5乗を求めようとしているので、Arithmetic exceptionというエラーになっていることが分かる。

コマンド

ブレークポイントを指定する

ブレークポイントを設定すると、そこで実行が一時停止します。

(gdb) b 行番号

(gdb) b 関数名

(gdb) b ファイル名:行番号

ブレークポイントを設定した箇所から、実行を再開する場合

(gdb) c

c はcontinueの省略です。

変数の値を見る

(gdb) print 変数名

参考資料

gdb を用いたデバッグ方法

http://uguisu.skr.jp/Windows/gdb.html