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