次の例では、ウオッチポイントを使って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」がお勧めです。
Programing Bible:バグ管理システム「Mantis」
Programing Bible:開発者のバグ潰しに役立つMantis
Programing Bible:さまざまな作業に対応するオープンソースのテストツール群
Programing Bible:Inquisitorでハードウェアをテストする
Programing Bible:ソフトウェア開発者必見のWorkbench Linuxディストリビューション
Programing Bible:AppChecker――Linux Foundationからリリースされた新世代の開発支援ツール
Programing Bible:petardfsでアプリケーションをテストする
Programing Bible:zzufを使ったファズテストCopyright © 2010 OSDN Corporation, All Rights Reserved.