VBScriptのデバッグログを出力するモジュールを作成
2024年06月08日
VBScriptはメモ帳にソースコードを書いて
Windowos上で動作させることができるのでめっちゃ手軽。
しかし、Windowos上で動作するので変なコードを仕込んでしまうと
なかなか止めることができず、タスクマネージャーから強制終了させるか
下手するとWindowosの再起動が必要になる場合がある。
テキストエディタだと、デバッグがやりづらい。
変数の状態を見るには、msgboxなんかをよく使うものの、
for ループの中に入れてしまうと、永遠とMSGBOXが出てめんどくさい。
そんなわけで、今回は手軽に変数の状態を見れるように
デバッグログを出力するモジュールを作ってみた。
Windowos上で動作させることができるのでめっちゃ手軽。
しかし、Windowos上で動作するので変なコードを仕込んでしまうと
なかなか止めることができず、タスクマネージャーから強制終了させるか
下手するとWindowosの再起動が必要になる場合がある。
テキストエディタだと、デバッグがやりづらい。
変数の状態を見るには、msgboxなんかをよく使うものの、
for ループの中に入れてしまうと、永遠とMSGBOXが出てめんどくさい。
そんなわけで、今回は手軽に変数の状態を見れるように
デバッグログを出力するモジュールを作ってみた。
以下の記事で似たようなことを書いてるけど、
用途と使い勝手が違うので、改めて書くことにした。
「VBScriptで進捗状況を表示する方法~プログレスファイル出力~」
「テキストファイルを使ったプログレス表示スクリプトを改良」
2024/06/08 追記
よく探してみたら全く同じ内容を投稿してた。。。作成済みソースの活用って難しいね。
「デバッグログを出力するvbscript」
開発用テンプレートを作って、よく使う処理は呼び出すだけにするべきだよな。
テキストをファイルに出力する処理とか、ドラッグドロップとか
今度リストアップしてみよう。
ベースは、コパイロットに依頼。出てきたコードは以下の通り。
' デバッグログを出力する関数
Sub WriteDebuglog(text)
' ログファイルのパス
Dim logFilePath
logFilePath = "debug.log"
' ファイルシステムオブジェクトの作成
Dim fso, logFile
Set fso = CreateObject("Scripting.FileSystemObject")
' ログファイルが存在するかチェックし、存在しなければ作成
If Not fso.FileExists(logFilePath) Then
Set logFile = fso.CreateTextFile(logFilePath)
Else
Set logFile = fso.OpenTextFile(logFilePath, 8) ' 8 = ForAppending
End If
' テキストをログファイルに書き込む
logFile.WriteLine Now & " | " & text
logFile.Close
' オブジェクトの解放
Set logFile = Nothing
Set fso = Nothing
End Sub
ぶっちゃけ、ほぼほぼこれで事足りるけど、ちょっとカスタマイズ。
VBScriptのコーディングするうえでは、1行ずつ現在時刻は要らないので、
ログの1行目にタイトルを入れることにした。
モジュールの外にdebugCnt を用意して、2回目以降の実行時にはタイトルを出力しない仕様に。
実行結果の比較することを想定して、出力するファイルに日時を入れて別名とするか
フォルダ内が散らからないように、常に同じファイル名をdateFlagで設定できるようにした。
また、コーディング中にサッとログを見れるようにモジュール名を「debuglog」に変更。何気に重要。
そんな感じで以下ソース。
' デバッグログを出力する関数(改良)
const dateFlag = 0 : dim debugCnt
Sub debuglog(text)
' ログファイルのパス
dim strNow : strNow = left(replace(replace(replace(now,"/",""),":","")," ","_"),15)
Dim logFilePath
if dateFlag = 0 then
logFilePath = "debug.log"
else
logFilePath = "debug" & strNow & ".log"
end if
' ファイルシステムオブジェクトの作成
Dim fso, logFile
Set fso = CreateObject("Scripting.FileSystemObject")
' ログファイルが存在するかチェックし、存在しなければ作成
If Not fso.FileExists(logFilePath) Then
Set logFile = fso.CreateTextFile(logFilePath)
Else
Set logFile = fso.OpenTextFile(logFilePath, 8) ' 8 = ForAppending
End If
' テキストをログファイルに書き込む
if debugCnt = 0 then
logFile.WriteLine chr(10) & chr(10) & "-------- | " & Now & " | デバッグログ | --------"
debugCnt = 1
end if
logFile.WriteLine text
logFile.Close
' オブジェクトの解放
Set logFile = Nothing
Set fso = Nothing
End Sub
PR
Comment