デバッグの方法

戻る

この手のプログラムのデバッグはちょっとばかり面倒臭い。自信のある無謀な方はいきなりサーバにプログラムを置き、適当なページを書いて動作確認をやってくれてもいいが、ループにはまったりするとタスクマネージャでも切れないプロセスになってしまったりする。筆者のマシンでも未完成のCGIプロセスが3本くらい、リスタートするまで走り続けてたりする。良くない例ですな。

プログラムの出力内容にデバッグ用情報を載せておく手がある。プログラムエラーを「On Error Goto 〜」でトラップし、エラーヘッダを返すわけだが、この際にエラー番号とエラーメッセージを表示するようなHTML文を吐くようにする。ただし、エラーメッセージは半角カナが使われているので、必ず全角に変換しておこう。リクエストされたパラメータや、重要なデータ等については、HTML本文中にコメントとして挿入しておいても良い。筆者の場合は、必ずクエリー文字列を入れるようにしている。どのみちクライアント側はアクセス時にURLで確認できるものだから、セキュリティ上も問題はない。

VB開発画面でのデバッグはどうするか。工夫が必要だ。まず標準出力の部分だが、サブルーチンや関数を使っているなら、開発初期段階ではこれらを「Debug.Print」にしてしまうのが手っ取り早い。ある程度動くメドが立ってきたら、今度は「.htm」形式のテキストファイルに吐き出すようにする。このファイルをブラウザにドラッグ&ドロップすれば出力イメージが見られるわけだから。これはそんなに難しくない。

次にパラメータ関係だ。これはちょっと面倒くさい。まず、環境変数がどうなっているかを知らなければならない。これは実践から入ってしまおう。環境変数を一覧するページを別途作っておき、CGIを叩くためのページから、その変数一覧ページへジャンプさせるのだ。この画面から、必要なパラメータを確認しておく。ASPを使っているなら、下記のような「servvar.asp」で良かろう。 あれ? これってデバッグと言うより、プログラム設計の問題かな..


環境変数一覧ページ内容


<html>
<head>
<titel>Server Variables</title>
</head>
<body>
<h1>HTTP Server Variables</h1>
<table border="1">
<tr><td>Variable</td><th>Value</th></tr>
<% For Each key in Request.ServerVariables %>
	<tr>
	<td><% = key %></td>
	<td>
	<%
	if Request.ServerVariables(key) = "" Then
		Response.Write "&nbsp;"
	else		
		Response.Write Request.ServerVariables(key)
	end if
	%>
	</td>
	</tr>
<% Next %>
</table>
</body>
</html>

ASPが使えない環境だとしたらちょっと困るが...。

さて、どの変数を扱うかが決まったら、方法は2つある。ひとつはプログラム中で「Environ」関数の代りに値となる文字列を代入する方法だ。当り前のこと。もうひとつは、DOS窓を開け、SETコマンドを使って環境変数を実際に定義してしまう方法だ。いくつもの環境変数を用いるとなると面倒だが、クエリー文字列だけだったら意外に面倒でもない。他のCGIプログラムを用いている場合は、そっちの方が誤動作するかもしれないので注意が必要だが、より現実に近い形になる。

標準入力をデバッグするのはますますもって面倒だ。標準入力サブルーチンの代りにファイル読み取りでも使うことになるのだろう。実は筆者は無謀な人間なので、テストサーバで実際に動かしてデバッグしている。環境的に恵まれてもいるから出来ることだが。 と言っても、テストサーバ自体は筆者のメインマシン。VB書きつつ、コンパイル&デバッグ...