WSHのデバッガ
猫科研究所はかなりWSHを重用しており、特にコマンドライン版しかないツールの起動と、その結果の取得・処理には便利だ。Windows2000以降では標準で用意されており、Internet Explolerを普通に更新していれば、大凡の最新環境になっているのもありがたい。Windows PowerShellはこれから標準になるものの、現在も多く使われているWindows2000でさえサポート外なのは、他人に気軽に使わせられず、かなり痛い。将来的にはこちらが主流なのは間違いないのだけれど。
このページを読む方はそんな能書きは分かっているだろうから閑話休題。もうあちこちで書かれているので今更だが、そのWSHのデバッガに関するまとめメモ。
Script Debugger
スクリプトのデバッガ自体はマイクロソフトからいくつか提供されている。
- Microsoft Script Editor(以前のOfficeに付属)
- Visual Web Developer(VWD)
- (Microsoft )?(Windows )?Script Debugger(正式名称が曖昧なので正規表現…)
ここで紹介するのは、3番目のもの。以後、単に「WSHデバッガ」と呼称する。MSEはOfficeが必須だし、VWDは基本的にWeb開発用途で、ローカルのスクリプトとして使用するWSHには向かない。ただし、それぞれWSHデバッガより高機能だったりするので、用途によってはそちらを使用のこと。特にVWDは2008から無償のExpressでもかなり使えるようになったとのこと。
WSHデバッガは、英語版がScript Debugger for Windows NT 4.0 and Laterから、日本語版がWindows Script Debuggerから取得可能。
"Windows NT 4.0"なんてキーワードが出てくることからもわかるように、これらはかなり古い。英語版は2005年で、日本語版は2001年の日付だ。
少なくともXP SP3で利用できることは確認しているが、VistaやWindows7でどうなってるかは未調査。
WSHデバッガでできること
実行制御(ブレークポイントの設定やステップ実行)と、コールスタック(関数呼び出し履歴)の確認。これだけ。
一応は変数の値の参照・変更もできるが、これは任意のスクリプトコードを実行できるコマンドウィンドウが使用できるだけで、リアルタイム変数ウォッチや、変数へのアクセスにブレークを設定できるわけではない。
正直、あまりに貧相で泣けてくる。IE8に付属の"開発者ツール"やFirefoxのFirebugの方が遙かに高機能だ。むしろ、この"開発者ツール"をWSHで使用できるようにしてくれればよかったと思うのだが、マイクロソフト的にはWSHは終わった技術なのだろう。
WSHデバッガの対象範囲
以下が対象。
- .js, .vbs, .wsfなどのWScript.exeとCScript.exeで動作するWSH。
- Internet Explorer内で動作するスクリプト。
- HTA(HTML Application)。
ただし、前述のようにIEのデバッガはより高機能なので、Web目的ならそちらの方がよい。
WSHデバッガを起動させる方法
上記のWSHデバッガをインストールしても、少なくともXPでは、エラー時に自動的にWSHデバッガが起動してくれるわけではない。
- スクリプトの実行時に以下のどちらかでデバッグ実行を指定する必要がある。
- CScript.exeやWScript.exeに//X(デバッグ環境で実行)を指定する。
- .wsfファイルとして、XMLタグでデバッグ実行を指定する。
- WSHデバッガのインストールが不完全である。
- インストールしただけではエラー時にデバッガが起動されない。
- インストールしただけでは起動されるデバッガの指定がWSHデバッガになっていない。
順番にやっつけよう。まずは、「デバッグ実行を指定する方法」だが、WSHの用途はファイルのドラッグ&ドロップが非常に多かったりするので、コマンドラインオプションはテスト時に面倒だ。個人的には.wsfファイルの指定をお勧めしたい。.wsfの先頭で、以下のように<?job ?>を指定しよう。
<?xml version="1.0" standalone="yes" encoding="UTF-16LE" ?> <package> <job id="wsftest"> <?job error="true" debug="true" ?>
errorはエラー表示のON/OFFだと言うが、実際には常にtrueになっているように思われる。WSHデバッガとしては、debug属性が重要だ。debugをリリース時にtrueのままにしてしまっていても、スクリプトにエラーがなければ、実行が遅くなるかもしれない程度で特に問題ないように思う。エラーがあった場合にも、デバッガのない環境では通常通りのエラー表示をするだけだ。
次に、エラー時にデバッガを起動する設定。これは以下のレジストリエントリを1に設定するのみ。
HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug
次に、デバッガの指定。以下のキー値にデバッガのパスを設定する。
HKEY_CLASSES_ROOT\CLSID\{834128A2-51F4-11D0-8F20-00805F2CD064}\LocalServer32
上記で指定するデバッガのパスは、通常以下の通り。環境に合わせること。
C:\Program Files\Microsoft Script Debugger\msscrdbg.exe
余談
Action Script Rubyではデバッグ機能は動作しない。デバッグインターフェース(IActiveScriptDebug)を実装していないとのことだ。
最終更新時間:2009年10月27日 07時54分01秒