Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (3,583)  
CrystalDiskInfo  (1,811)  
Tera Term  (1,787)  
HandBrake Japanese Language Version  (1,743)  
CrystalDiskMark  (980)  
FFFTP  (765)  
ffdshow  (719)  
mixfont-mplus-ipa  (615)  
MergeDoc  (571)  
10  TortoiseSVN  (555)  
11  Amateras  (437)  
12  BathyScaphe  (396)  
13  FreeMind  (372)  
14  Cabos  (327)  
15  ギコナビ  (316)  
More >>

シェル・スクリプトのデバッグ・ツール、bashdb

2008年12月04日 09:45 Ben Martin 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、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文(2008年11月24日)

最終更新:2009年02月03日 17:07
SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.