シェルスクリプトのデバッグツール、bashdbPrograming Bible(3/3 ページ)

» 2008年12月04日 13時30分 公開
[Ben Martin,SourceForge.JP Magazine]
SourceForge.JP Magazine
前のページへ 1|2|3       

 次の例では、ウオッチポイントを使ってresult変数がいつどこで変更されるかを調べている。最初にnextコマンドを実行しているが、これはこうしないとウオッチが機能しなかったからだ。次に、ウオッチポイントを設定しcコマンドで実行を再開させている。そして、result変数の値が変化するところで実行が停止し、新旧の値が表示される。


(/home/ben/testing/bashdb/fibonacci.sh:3):
3:    version="0.01";
bashdb<0> next
(/home/ben/testing/bashdb/fibonacci.sh:16):
16:    for i in `seq 1 10`
bashdb<1> watch result
 0: ($result)==0 arith: 0
bashdb<2> c
Watchpoint 0: $result changed:
  old value: ''
  new value: '1'
(/home/ben/testing/bashdb/fibonacci.sh:19):
19:    echo "i=$i result=$result"
bashdb<3> c
i=1 result=1
i=2 result=1
Watchpoint 0: $result changed:
  old value: '1'
  new value: '2'
(/home/ben/testing/bashdb/fibonacci.sh:19):
19:    echo "i=$i result=$result"

 次の例では、引数の式が真になったとき実行を停止させるwatcheコマンドを使った。このコマンドの場合は、不可思議な「最初のnext」は不要だ。ここでは、はじめの方のフィボナッチ数は飛ばしてresultが4を超えたときに停止するようウオッチを設定している。このコマンドは条件なしで使うこともできる。例えば、watche resultとすると、result変数が変化したとき停止する。


$ bash --debugger ./fibonacci.sh
(/home/ben/testing/bashdb/fibonacci.sh:3):
3:    version="0.01";
bashdb<0> watche result > 4
 0: (result > 4)==0 arith: 1
bashdb<1> continue
i=1 result=1
i=2 result=1
i=3 result=2
i=4 result=3
Watchpoint 0: result > 4 changed:
  old value: '0'
  new value: '1'
(/home/ben/testing/bashdb/fibonacci.sh:19):
19:    echo "i=$i result=$result"

 シェルスクリプトが思い通りに動かないときは、echo文やprintf文を順次挿入して不正な値や到達しないコードパスを探したものだ。しかし、bashdbを利用すれば、変数をウオッチしたりブレークポイントを設定したりして、速やかにデバッグできる。

Ben Martin 10年以上にわたってファイルシステムに携わっている。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。


プログラミングにかんする悩み、プログラミングの最新動向を知りたければ「Programing Bible」がお勧めです。


前のページへ 1|2|3       

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ