次の例では、ウォッチポイントを使って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、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。
