特集
» 2008年12月04日 13時30分 UPDATE

Programing Bible:シェルスクリプトのデバッグツール、bashdb (1/3)

シェルスクリプトで多くの処理をこなしている方は多いだろう。しかし、シェルスクリプトが思い通りに動かないときに、不正な値や到達しないコードパスを探するのは少々やっかいだ。そこで、bashdbを利用すれば、変数をウオッチしたりブレークポイントを設定したりして、速やかにデバッグできる。

[Ben Martin,SourceForge.JP Magazine]
SourceForge.JP Magazine

 Bash Debugger Project(bashdb)を使うと、bashスクリプトにブレークポイントを設定したり変数を調べたりバックトレースしたり1行ずつ実行したりできる。bashdbは、C/C++デバッガ並みの技法でbashスクリプトをデバッグするツールだ。

 インストールされているbashがbashdbをサポートしているかどうかは、次のコマンドを実行してみれば分かる。下に示したbashdbのプロンプトが表示されなければ、bashdbをインストールする必要がある。


$ bash --debugger -c "set|grep -i dbg"
...
bashdb<0>

 bashdbのパッケージはUbuntu Intrepidのリポジトリにはあるが、openSUSE 11やFedora 9のリポジトリにはない。試用マシンは64ビットFedora 9マシンなので、通常のコマンド「./configure; make; sudo make install」を使ってソースからbashdbバージョン4.0-0.1をビルドした。

 Bash Debuggerを起動するときは「bash --debugger foo.sh」という構文を利用するか、「bashdb foo.sh」コマンドを実行する。I/Oリダイレクションで問題が発生する可能性がある場合を除き最初の起動方法が推奨されているので、以下の説明ではこの方法を用いることにする。このほか、dddEmacsバッファからの起動も可能だ。

 bashdbのコマンドは、GNU debugger(gdb)とよく似ている。例えば、スクリプトの次の行を実行するコマンドはstepまたはnextで、前者は関数の内部にまで入るが後者は入らない。バックトレースはbt、bashdbを抜けるときはquitまたはCtrl-D、変数を表示するなら「print $foo」という具合だ。しかし、gdbとは少し異なるところもあり、最後の例で変数に接頭辞$をつけるのもその1つ。また、bashdbのプロンプトで何も入力せずにEnterを押すと、直前のコマンドにかかわらず、最後に実行したstepコマンドまたはnextコマンドのいずれかが実行されるところも異なる。

 シェル変数を確認したいときは、上に述べたようにprintコマンドを使うが、その際、変数名には接頭辞をつけなければならない($foo)。もう少し短い「 x foo」コマンドを使う方法もある。このコマンドはdeclareコマンドを使って表示するので、関数の定義を確認したいときにも使える。

 bashdbとデバッグ対象のスクリプトは同じbashシェルの中で動作する。そして、bashは名前空間という概念が希薄なため、bashdbの関数とシンボルはグローバルな名前空間の中に置かれることになり、従ってスクリプトからも見えることになる。そこで、bashdbはシンボルに_Dbg_という接頭辞をつけて区別する。このため、スクリプトでこの接頭辞を使ってはならない。さもないと、クラッシュする可能性がある。bashdbは環境変数も使うが、同様に、DBG_という接頭辞がつく。ほかに、BASH_という接頭辞を持つ標準のbash環境変数も使う。

       1|2|3 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

ピックアップコンテンツ

- PR -

注目のテーマ

マーケット解説

- PR -