(for Internet Explorer)
← ▼ ▲
↑
エラーコード
Dim E_Others : E_Others = 1
Dim E_TestPass : E_TestPass = 21
Dim E_TestSkip : E_TestSkip = 22
Dim E_TestFail : E_TestFail = 23
Dim E_BuildFail : E_BuildFail = &h80041004
Dim E_OutOfWritable : E_OutOfWritable = &h80041005
Dim E_NotFoundSymbol : E_NotFoundSymbol = &h80041006
Dim E_ProgRetNotZero : E_ProgRetNotZero = &h80041007
Dim E_Unexpected : E_Unexpected = &h80041008
Dim E_TimeOut : E_TimeOut = &h80041009
Dim E_WIN32_FILE_NOT_FOUND: E_WIN32_FILE_NOT_FOUND = &h80070002
Dim E_WIN32_DIRECTORY : E_WIN32_DIRECTORY = &h8007010B
Dim E_ProgTerminated : E_ProgTerminated = &hC0000005
Dim E_BadType : E_BadType = 13
Dim E_FileNotExist : E_FileNotExist = 53
Dim E_EndOfFile : E_EndOfFile = 62
Dim E_WriteAccessDenied : E_WriteAccessDenied = 70
Dim E_ReadAccessDenied : E_ReadAccessDenied = 70
Dim E_PathNotFound : E_PathNotFound = 76
Dim E_AlreadyExist : E_AlreadyExist = 58
(src)
関連
→ エラーメッセージ (VBS)
→ Windows エラーコード
← ▼ ▲
[E_NotClear] エラー処理の途中で終了しました。Err2.Clear または再 Raise してください
Err2::Clear
が呼ばれないで、スクリプトが終了しました。
Err2::Raise
または
TryStart
〜 TryEnd でエラー処理するときの最後に必要な
Err2::BreakErrID
を設定して、エラーが発生した場所でブレークして、コールスタックを参照
して、TryStart 〜 TryEnd のエラー処理に、Err2::Clear または Err2::Raise を記述してください。
<ERROR msg="Script finished before Err2.Clear or Raise the error"
jp="エラー処理の途中で終了しました。Err2.Clear または再 Raise してください"
err_symbol="E_NotClear" />
エラーメッセージ：
処理フロー
VBScript global code (メインvbs の vbslib include)
ResumePop
CallFinalizeInModules
(= g_FinalizeModules(i))
FinalizeModule (vbslib.vbs)
Err2.OnSuccessFinish
echo GetErrStr( num, Description )
0
← ▼ ▲
エラーメッセージのXML書式
<ERROR msg="Out of Diff"
src=
"C:\folder\file1.txt"
dst=
"C:\folder"
/>
<ERROR
ログを検索する時は、"<ERROR " で検索すると、すぐに見つかります。
エラーが発生したときは、"<WARNING " で検索すると問題を解決するヒント
が得られるかもしれません。
msg
自然言語のエラーメッセージ
src, dst など
値がパスのときは、タグジャンプができるように新しい行から値を書く。
→ GetErrStr
関連
XML を使って、エラー情報を構造化します。
もしエラー情報の一部を取得したいときは、エラーメッセージ（Err2.Description） を
LoadXML
に渡してください。 参考
→ Err2 オブジェクト
<ERROR msg="シンボルが見つかりません" path="SymbolA"/>
<WARNING msg="アップデートのチェックはスキップしました。"/>
← ▼ ▲
Error
Sub Error()
簡易的にその他のエラーを発生させます。
コーディングが最も楽なエラー発生です。 その代わり、エラーの内容はユーザに
伝わりません。 cscript.exe のエラーレベルは 1 になります。
エラー値を返す API やライブラリは、少なくとも、正常に処理されたことを示す値
でなかったら、本関数を呼び出して、緊急停止させます。
想定済みのエラーであれば、ユーザがエラーに対応できるように、Raise などを
使ってエラー処理を実装してください。
想定外のエラーや開発者が発生させたことがないエラーは、本関数を呼び出して、
緊急停止させます。
(src)
関連
→ Raise
エラーを発生させる。
← ▼ ▲
OrError
Sub OrError()
Stop:OrError
サンプル
子プロセスであっても、そのコードを実行したところでブレークできるようにします。
(src)
通常、上記のように Stop 命令と同時に使用します。
→ エラーが発生した瞬間のスクリプト内部の様子を調べる
g_debug = 0 の状態で上記のコードを実行したときは、OnError 関数の中でエラーが発生します。
このエラーにより、このコードでブレークするために必要な設定が、エラーメッセージに表示され
ます。
参考
ブレークするために必要な設定を行って、スクリプトを再起動すると、Stop 命令によってブレーク
します。 続いて実行される OnError 関数の中では何もしないので、続きをステップ実行できます。
← ▼ ▲
Raise
Sub Raise( ErrorNum as integer, Description as string )
新規にエラーを発生させます。
Raise 1, "ファイルが見つかりません c:\a.txt"
【引数】
ErrorNum
Description
エラーコード
→ エラーを発生させる(VBS)
参考
エラーメッセージ
(src)
→ Error
関連
→ GetErrStr
→ Assert
簡単に実装できるエラー発生
標準形式のエラーメッセージを返す。
条件が満たされているかをチェックします。
→ 警告して終了するには
サンプル
← ▼ ▲
Warning
Sub Warning( Description as string )
警告を表示してプロセスを終了します。
(src)
【引数】
Description
警告メッセージ
エラーコード E_TestPass(=21) のエラーが発生します。
Warning "アップデートのチェックはスキップしました。"
サンプル
→ エラーメッセージのXML書式
<WARNING msg="アップデートのチェックはスキップしました。"/>
→ T_Warning フォルダー
テスト
表示内容：
スクリプト：
← ▼ ▲
GetErrStr
Function GetErrStr( e_num as integer, e_desc as string ) as string
標準形式のエラーメッセージを返す。
【引数】
e_num
e_desc
エラーコード
エラーメッセージ
(src)
→ エラーメッセージ文字列の標準書式(XML版)
サンプル：
関連
Dim e ' as Err2
echo_v GetErrStr( e.num, e.desc )
→ GetErrStr (Err2)
エラーメッセージの例：
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
← ▼ ▲
AppendErrorMessage
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
e.OverRaise e.Number, AppendErrorMessage( e.Description, _
"msg2=""追加メッセージ。""" )
End If
Function AppendErrorMessage( in_OldMessage as string, in_Appending_XML_Attributes as string )
as string
AppendErrorMessage
サンプル
ソース
エラーが発生して、そのエラーメッセージが XML 形式なら、属性
msg2="追加メッセージ。" を追加します。
エラーメッセージを追加します。
【引数】
in_OldMessage
in_Appending_XML_Attributes
今までのエラーメッセージ
追加するエラーメッセージ、XML 属性の形式
返り値
新しいエラーメッセージ
→ vbs_inc_sub.vbs
OverRaise
参考
→ OverRaise
← ▼ ▲
TryStart
Function TryStart( e as Err2 ) as boolean
Try ブロックの開始に記述します。
On Error Resume Next を呼び出すべきかどうかを判定します。
(src)
→ Err2 のコーディング例 (TryStart, TryEnd)
参考
"エラーが発生しているときに TryStart は呼べません。" エラーについて
ほとんどの場合、１つ目のエラーを対処することで、２つ目のエラーは発生しなくなるため、
２つ目のエラーが発生したときに、１つ目のエラーの情報が上書きされて消えてしまうことが
ないようにすることが重要です。
エラーが発生(1)
TryStart
TryEnd
エラーが発生(2)
← このエラーが前のエラーの情報を消してしまう
処理
TryEnd
TryStart
←
エラーにしている理由
対処方法
エラーメッセージに表示されているように、g_debug 変数などの値を設定し、エラーが
発生している場所、つまり、TryStart の中の Stop 命令でブレークさせます。
1.
Err.Number が 0 以外なら、Err.Description の値を、e.num が 0 以外なら e.desc の
Err2::desc の値を表示させて、１つ前のエラーの内容を確認します。
2.
なお、多くの場合、TryStart を使わない On Error Resume Next によって、そこで
発生したエラーでブレークすることができなくなっています。
コールスタックを上にたどっていき、On Error Resume Next が無いか探します。
あったら、おそらく、そこで１つ前のエラーが発生しているので、そのエラーを発生
させなくするか、クリアすることで対処してください。
3.
VBScript の不具合に対する対処
Class_Initialize か Class_Terminate で発生したエラーは、VBScript は投げられま
せん（エラーによる中断をしません）。
ErrCheck
を呼び出してください。
ErrorCheckInTerminate
または
していない
Err2::Clear
（もし、
オプションを使っていたら、使わないで動かしてください。 エラーの状況
と、/g_debug の設定が合っていないと、誤って TryStart のエラーになることがあります。)
/g_debug
→ "エラーが発生しているときに TryStart は呼べません。" エラーについて
エラーをチェックするテストで期待と異なるエラーが発生するとき
If TryStart(e) Then On Error Resume Next
CreateFile fo + "\a.txt", "ABC" // 異なるエラーか発生
If TryEnd Then On Error GoTo 0
If e.num <> E_OutOfWritable Then Fail // ここのチェックで引っかかる
異なるエラーが発生した場所を知るには、チェックする前に
"Test.vbs" /g_debug:5,1
----------------------------------------------------------------------
<ERROR err_number='1' err_description='エラー'/>
e.Raise
If e.num <> E_OutOfWritable Then Fail
Raise
してください。
それでも /g_debug オプションに設定すべき値の表示が変わらないときは、エラーが
発生していない可能性があります。 エラーが発生していないときの問題は、/g_debug
オプションで自動的にエラーが発生した場所を表示することはできません。
→ エラーをチェックするテストで期待と異なるエラーが発生するとき
← ▼ ▲
TryEnd
Function TryEnd() as boolean
Try ブロックの終了に記述します。
On Error GoTo 0 を呼び出すべきかどうかを判定します。
→ Err2 のコーディング例 (TryStart, TryEnd)
参考
(src)
← ▼ ▲
Trying
Function Trying() as boolean
Try ブロックの中で記述します。
エラーが発生していたら False を返します。
→ Err2 のコーディング例 (TryStart, TryEnd)
参考
(src)
← ▼ ▲
ErrCheck
(src)
Sub ErrCheck()
これまでの処理で、エラーがあったかどうかをチェックして、エラーがあったら発生させます。
クラスの Class_Initialize メソッドの中でエラーが発生しても、VBScript は、続きを実行してしまい、
エラーを見つけるのが困難になります。 new でオブジェクトを生成したら、本関数を呼び出して
ください。
サンプル：
Set obj = new ClassA : ErrCheck
→ テスト [T_ErrOnNew] コンストラクタで発生したエラーを検出
キーワード：
new の注意点
テスト
関連
→ ErrorCheckInTerminate
← ▼ ▲
ErrorCheckInTerminate
Sub ErrorCheckInTerminate( ErrNumAtStart as integer )
クラスの Class_Terminate の中で発生したエラーを表示します。
エラーが発生していたら、Err オブジェクトの内容を echo 出力して Stop または pause します。
エラーが発生していなかったら（Err.Number = 0 なら）、何もしません。
Class_Terminate の中でエラーを発生させることはできないので、ErrorCheckInTerminateも
エラーを発生させません。
→ Class_Terminate の中のエラー
Private Sub Class_Terminate()
Dim en,ed : en = Err.Number : ed = Err.Description
On Error Resume Next '// This clears error
If en=0 or en=21 Then
Else
del Me.TmpDstPath
End If
ErrorCheckInTerminate en
On Error GoTo 0 : If en <> 0 Then Err.Raise en,,ed '// This sets en again
End Sub
サンプル：
(src)
参考
【引数】
ErrNumAtStart
Class_Terminate に入った直後のエラーコード
ErrorCheckInTerminate
→ T_Finish.vbs # ErrorCheckInTerminate
テスト
On Error Resume Next '// This clears error
If g_count_up(0)=0 Then Stop
echo "g_count(0)=" & g_count(0) '// watch-> g_count [TODO]
If g_count(0) = 99 Then On Error GoTo 0
エラーが発生したときに対処法
Class_Terminate の中で発生したエラーでブレークさせる方法を説明します。
On Error Resume Next の後に、下記のコードを記述してください。
一度実行したら、最後の行の 99 を g_count(0) の値に変更して再度実行してください。
0
0
0
0
99
→ g_count, g_count_up
参考
なるべく、Class_Terminate の中では、複雑な処理をしないで、
エラーが発生したことを示すフラグを立てて、後で処理してください。
← ▼ ▲
NotCallFinish
Sub NotCallFinish()
Finish が呼ばれないで、クラスの Class_Terminate が呼ばれたときにエラー表示します。
関連
→ Class_Terminate の中のエラー
Private Sub Class_Terminate()
If en = 0 and not Me.IsFinished Then NotCallFinish
End Sub
サンプル：
(src)
← ▼ ▲
FinObj クラス (Finallyブロック)
FinObj クラスを使うと、Finally ブロックに似た記述をすることができます。
FinObj のデストラクターから、Finally ブロックに相当する関数を呼び出します。
エラーが発生しても、続きを実行したり、キャッチしたりしませんが、Finally ブロックは実行します。
VBA の On ErroroGoto (Label) に相当する機能です。 WSH の VBScript では Goto は 0 しかできません。
Sub FuncA( Path )
Set fin = new FinObj : fin.SetFunc "FuncA_Finally"
ren Path, "a.txt" : fin.SetVar "Path", Path '// 戻すときのデータを記録
:
fin.SetVar "Path", Empty '// 正常時は戻さないならデータを削除
End Sub
Sub FuncA_Finally( Vars ) '// Finally ブロックに相当
en = Err.Number : ed = Err.Description : On Error Resume Next '// This clears error
path = Vars.Item("Path") '// 戻すデータを取得
If not IsEmpty( path ) Then
ren "a.txt", path '// 戻す処理
End If
ErrorCheckInTerminate en : On Error GoTo 0 : If en <> 0 Then Err.Raise en,,ed '// This sets en again
End Sub
FuncA_Finally
Path
FuncA_Finally
Path
ren Path, "a.txt"
ren "a.txt", path
記述例： 関数の場合
関連
→ Class_Terminate （デストラクタ）
(src)
ローカル変数のデストラクタが動く順番に依存しないようにしてください。
Sub FuncA( Path )
Dim fin : Set fin = new FinObj : fin.SetFunc "FuncA_Finally"
Dim ds_:Set ds_= New CurDirStack
fin.SetVar "CurDir", g_fs.CurrentDirectory
:
End Sub : Sub FuncA_Finally( Vars )
del Vars.Item("CurDir") + "\_temporary_folder"
End Sub
たとえば、下記のように、デストラクタでカレント・フォルダが変わるとき、FuncA_Finally が
呼ばれるタイミングが、カレント・フォルダが変わる前か後かどうか不定なので、Finally
ブロックで相対パスを指定することはできません。
Class ClassA
Public Sub FuncA( Path )
Set fin = new FinObj : fin.SetFunc "FuncA_Finally"
:
End Sub : Public Sub FuncA_Finally( Vars ) '// Finally ブロックに相当
:
End Sub
End Class
Sub ClassA_FuncA_Finally( Vars ) : Vars.Item("Me").FuncA_Finally( Vars ) : End Sub
記述例： メソッドの場合
→ ErrorCheckInTerminate
関連
→ エラー処理, On Error
← ▼ ▲
処理フロー (Err2)
→ エラーが Err2.Clear または再 Raise されないで終了したときの処理フロー
エラーが発生して終了するとき
→ エラーが発生して終了するとき
正常終了するとき
→ 正常終了するとき
VBScript global code
ResumePop
CallFinalizeInModules
:
Err.Raise
g_FinalizeInModulesCaller.Class_Terminate
CallFinalizeInModules
1
(= g_FinalizeModules(i))
FinalizeModule (vbslib.vbs)
0
(= g_FinalizeModules(i))
FinalizeModule (vbslib.vbs)
On Error Goto 0 していないときは 1
(メインvbs の vbslib include)
(メインvbs の vbslib include)
VBScript global code
→ 処理フロー （vbs_inc/setting）
関連
WScript.Echo Err.Description
If g_CommandPrompt = 1 Then
WScript.Sleep 2000
← ▼ ▲
困ったときは？ （デバッグ）
→ デバッグを開始する
エラーメッセージを見ても分からないときは、スクリプトの開発者に質問してください。
あなたが開発者であるときは、デバッグモードで動かしてみてください。
ソフトウェアデザイン館 Sage Plaisir 21 http://www.sage-p.com/
サポート
→ vbslib2 から vbslib3 へ移植するには
→ エラーメッセージの標準書式
ホームページにあるサポート掲示板かメールアドレスへ
→ エラーコード
→ 長い文字を入力するときの注意
→ g_count, g_count_up
… スルーカウンタ
→ 条件ブレーク
→ ファイル出力を開始するタイミングでブレークする
→ SetupDebugTools
→ ウォッチ (WS, WD, WX)
… デバッグ機能の設定場所
→ g_debug_params
… 起動時のパラメーターを指定する
→ 性能計測
→ g_debug_var
← ▼ ▲
g_debug - デバッグを開始する (vbslib)
debugger.bat
Test.vbs ファイルをデバッガにアタッチします
@wscript //x Test.vbs
@pause
g_debug
モジュールの一部が動きますが、
そこをデバッグするときは、下記のバッチファイルを実行してください。
デバッグを中止するときは、kill_wscript.bat を実行してください。
デバッグを中止するときは、コマンドプロンプトを閉じてください。
コマンドプロンプトが表示されていないときは、kill_wscript.bat を実行してください。
C:\home\sample.vbs(34, 3)
Microsoft VBScript 実行時エラー: この変数は宣言されていません。: 'e'
デバッガが無くても、g_debug=1 にすれば、エラーメッセージが詳しくなることがあります。
[ERROR](500) この変数は宣言されていません。
g_debug=0
g_debug=1
g_debug=1 にすると、詳しい動作内容が表示されたり、エラーが発生したらブレーク
したりするなど、若干動きが異なります。 この動きをさせないで、デバッガに接続する
には、g_debug=0 にして、下記のバッチファイルを実行してください。
vbs_inc
内部で、デバッガに接続するまでに、
@cscript //x Test.vbs /g_debug:0
@pause
Test.vbs ファイルをデバッガにアタッチします
debugger.bat
デバッガを終了する
デバッグモードにしないでデバッガに接続
wscript ではないことに注意
g_CommandPrompt
=0 なら wscript にしてください
ただし、
vbslib include や、vbs_inc モジュールのデバッグ
wscript であることに注意
デバッガが無いときの g_debug
ただし、行番号が出るのは、文法エラーのみです。
コールスタック（デバッグ | ウィンドウ | 呼び出し履歴）を見れば、全体から見てどの部分で
止まっているかが分かります。
→ デバッガを終了する
→ デバッガが無いときの g_debug
→ デバッグモードにしないでデバッガに接続
→ vbslib include や、vbs_inc モジュールのデバッグ
デバッガで開いているソースの場所を知る
→ デバッガで開いているソースの場所を知る
'// g_SrcPath="C:\Folder\vbslib\Sample.vbs" ... デバッグ時に自動的に付きます
Dim g_SrcPath
Class Sample_vbs : Public FullPath : End Class
Dim g_Sample_vbs
Set g_Sample_vbs =_
new Sample_vbs
With g_Sample_vbs
.FullPath = g_SrcPath
End With
Class ClassA
Public Property Get DefineInfo() : Set DefineInfo = g_Sample_vbs
End Property
End Class
メイン・スクリプトのパスは、WScript.ScriptFullName プロパティの値を見れば
分かりますが、インクルードしたスクリプトのパスは、通常分かりません。
しかし、g_debug=1 でデバッガに接続したときに表示される vbslib のソースは、
１行目にフル・パスが記述されたコメントが付きます。 （ただし、Visual Studio 2012 では、
すべてのファイルが１つのウィンドウにまとめられてしまうため、"g_SrcPath=" で上方向
に検索してください。）
また、ソースの先頭に下記のような記述があり、
g_SrcPath の値を代入した g_〜_vbs.DefinePath 変数の値に、インクルードしたスクリプト
のパスが入っています。 Visual Studio では、この変数を選択してウォッチ・ウィンドウへ
ドロップし、値（パス、" "付きでも可）をコピーして、 ファイル・オープンで開けます。
もし、g_〜_vbs.DefinePath 変数が無くても、最後の call_vbs, call_vbs_d が呼び出している
関数を定義しているスクリプトのパスなら、g_SrcPath の値から知ることができます。
最後以外は、コールスタックを目的の call_vbs, call_vbs_d に切り替えて、 path 引数
の値を調べることで分かります。
また、下記の式の値が True なら、最後の call_vbs, call_vbs_d が、メイン・スクリプト
の関数を呼び出していると判断できます。
g_SrcPath = WScript.ScriptFullName
→ エラー、デバッグ (VBScript)
→ ファイル出力を開始するタイミングでブレークする
g_SrcPath
.vbs ファイルの先頭
vbs ファイルが、main 関数を持ち、include もされる場合、上記の実装では、二重定義
エラーになります。 下記のように実装してください。
Dim g_Sample_vbs
If IsEmpty( g_Sample_vbs ) Then Declare_g_Sample_vbs
Sub Declare_g_Sample_vbs
ExecuteGlobal "Class Sample_vbs : Public FullPath : End Class"
Set g_Sample_vbs =_
new Sample_vbs
With g_Sample_vbs
.FullPath = g_SrcPath
End With
End Sub
Sub main2( Opt, AppKey )
g_SrcPath = WScript.ScriptFullName : Declare_g_Sample_vbs
:
→ 条件ブレーク
→ g_count, g_count_up
→ コマンドラインやショートカットからデバッガーに接続する
→ メッセージボックス (VBScript)
g_debug=0
main.vbs
→ SetupDebugTools
→ SkipToSection
インクルードしたファイルにコンパイルエラーが発生したときのデバッグ (g_is_compile_debug)
インクルードしたファイルがコンパイルエラーしたときは、g_is_compile_debug = 1 として
起動すると、コンパイルエラーがあった vbs ファイルがある行を開きます。 ただし、
'--- start of parameters for vbslib include -------------------------------
g_debug = 0 '// release:0, debug:99, -1:call SetupDebugTools
Dim g_is_compile_debug : g_is_compile_debug = 1
Setting_getEditorCmdLine
に、行番号を指定して開くことができるテキストエディタが
すでに登録してある必要があります。
→ コンパイルエラーが発生したときのデバッグ (g_is_compile_debug)
→ T_CompileDebug フォルダ
テスト
→ 動作モード、デバッグ関係のグローバル変数
簡易版
→ get_DefineInfoObject
エラーが発生したら、エラーが発生した瞬間でブレーク（一時停止）するために必要な、
デバッガにアタッチして、１つ目のエラーでブレークする
g_debug = 1
テスト
子プロセスでブレーク(Stop)する
ブレークしたい場所に Stop 命令を記述してデバッガーに接続しても、RunProg 関数など
で起動した子プロセスが Stop 命令を実行したときは、ブレークしません。
→ 子プロセスでブレーク(Stop)する
ソース・ファイルの中の任意の場所でブレーク（一時停止）する
→ ソース・ファイルの中の任意の場所でブレーク（一時停止）する
エラーが発生した瞬間のスクリプト内部の様子を調べる
→ エラーが発生した瞬間のスクリプト内部の様子を調べる
WSH のデバッガーがインストールされていれば、スクリプト・ファイルへのショートカッ
トを作成、プロパティ - リンク先に、下記の /g_debug オプションを追加、ショートカ
ットから起動すると、問題がある場所で停止します。
----------------------------------------------------------------------
"T_Sample.vbs" /g_debug:1
----------------------------------------------------------------------
<ERROR msg="変数が定義されていません" key="${Var1}+${Var2}"/>
表示されるエラーメッセージの例
Sample.vbs
関連
→ テストが Fail したとき
多くの場合、vbslib の内部関数の中でブレークしてしまうので、自分が扱っているスクリプトが
見つかるまで、コールスタック（デバッグ | ウィンドウ | 呼び出し履歴）を開いて、探してください。
深い
浅い
もう１つは、メイン・スクリプトの
の中にある g_debug = 0 を編集して
１つは、*.vbs ファイルのショートカットを作成して、右クリック [ プロパティ ] の [ リンク先 ]
に、/g_debug:1 オプションを設定してください。
...\sample.vbs /g_debug:1
リンク先：
１つ目のエラーでブレークする
g_debug
などに設定すべき値が自動的に表示されます。
デバッガーは、Visual Studio Community 以上、または MS-Office 付属の
ブレークしたいソースの場所に、Stop:OrError を記述して実行してください。
→ g_count, g_count_up
２回目以降でブレークする方法
→ 条件ブレーク
関連
ください。 編集したら、スクリプトを再度実行してください。
→ エラー処理のデバッグ
Microsoft Script
Editor
に含まれています。 無料の
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、デバッガ
に接続して問題がある場所で停止します。
"sample.vbs"
----------------------------------------------------------------------
g_debug = 1
----------------------------------------------------------------------
<ERROR err_number='1' err_description='Stop:OrError'/>
その状態で実行すると、Stop:OrError を記述した場所でブレークします。
g_debug などの変数に設定すべき値が書かれたコードが表示されます。 このコードを、
メイン.vbs の最後にある SetupVbslibParameters 関数の最後に記述してください。
Stop:OrError
SetupVbslibParameters
コマンドラインやショートカットからデバッガーに接続する (/g_debug)
として起動するだけで、デバッガーに接続します。
/g_debug:1 にすると、１つ目のエラーでブレークします。
cscript sample.vbs /g_debug:99
コマンドライン：
リンク先：
"C:\Folder\sample.vbs" /g_debug:99
WSH のデバッガー
がインストールしてある環境では、
関連
→ デバッグを開始する, g_debug (vbslib)
scd10jp.exe
も使えます。
テスト
→ T_Err2_Debug1_WithDebugger
→ T_Err2_Tree
→ [T_ErrInfo] ユーザへのエラー通知とデバッガ接続
"C:\Folder\sample.vbs" /g_debug:2,1;1
のような複雑な記述もできます。 記述すべき値はエラーメッセージに表示されます。
→ エラーが発生した瞬間のスクリプト内部の様子を調べる
エラーが発生した瞬間でブレークさせるには、２つの方法があります。
g_debug
g_debug_process
g_debug_tree
コロンの次は、
、コンマの次は、
、セミコロンの次は、
に設定されます。
その代り、Stop:OrError と記述すると、ブレークするために必要な方法が表示されます。
参考
→ OrError
→ T_ChildProcessIDNest_Manually2.vbs
または、ショートカットを作成して、ショートカットを右クリック [ プロパティ ] の、
vbslib を使用しているスクリプトは、
デバッガーとは、スクリプトの実行を一時的に止めて、変数の値を確認することなどができる
ツールです。 正しい値で処理されているところと、誤った値で処理されているところを
挟み込んでいくようにして、問題がある場所を見つける作業を支援します。
→ デバッガー （Visual Studio など）
インストール
→ コマンドラインやショートカットからデバッガーに接続する
デバッガーの起動の仕方
Mircrosoft 製のデバッガーは、すべて同じ手順でデバッガーを起動できます。
vbslib を使っているスクリプトの場合：
vbslib を使わない場合：
→ デバッガー （Visual Studio など）
その他の手順
Visual Studio 2008 Professtional で、VBScript (WSH) をデバッグ
一部のオブジェクト（静的オブジェクト）は、DefineInfo.FullPath プロパティに、クラスを定義
しているソースのフル・パスが入っています。DefineInfo プロパティが無くても、メソッドに
ステップインしたときのソースの１行目から分かります。
開いているソースのフル・パスは、１行目に自動的に挿入されています。
ただし、Visual Studio 2010 以後は、インクルードしたすべてのスクリプトファイルの内容が
１つの [eval code] ウィンドウにまとめられてしまいますので、「'// g_SrcPath="」 で前方
検索してください。
"C:\Folder\sample.vbs" /g_debug__:2,1;1
一時的にデバッガーの接続をしないときは、d_debug オプション全体を消さなくても、オプション
の名前を少し変更するだけでできます。 こうすれば、再接続するときに、オプションのパラメー
ターを入力し直す必要がなくなります。
（メモ） これができるのは、無効なオプションを VBScript がエラーにしないためです。
デバッガーに表示されているソース コードをテキスト エディターで開くときは、
OpenVBSLibSource コマンド
を実行してください。
→ デバッグ用一時コードのテンプレート
関連
g_debug__
←
↓