Sunday, July 13, 2008

PowerShellには、スクリプトのデバッグを行うために、Set-PSDebugというコマンドレットがあります。

書式は大きく2つに分けることができ

Set-PSDebug [-Trace 数値] [-Step] [-Strict]

Set-PSDebug -Off

です。[]がついている箇所は省略可能です。

-Traceパラメータ

-Traceパラメータに指定できる値には下記の3つがあります。

説明
0 スクリプトのトレースを無効にする
1 実行されるスクリプト行をトレースする
2 スクリプト行、変数の代入、関数呼び出し、およびスクリプトをトレースする

では、前回のスクリプトファイル(Debug.ps1)を使用して実験してみましょう。

$a = 2
$b = 3
$c = $a + $b
Write-Debug "Line4: $c"
$a = 4
$b = 5
$c = $a + $b
Write-Debug "Line8: $c"

-Traceに0を指定した場合

まずはSet-PSDebugコマンドレットによるスクリプトファイルのデバッグ方法ですが

Set-PSDebug -trace 0; ./Debug.ps1

のようにします。

-Traceパラメータに0を指定した場合の実行結果は下記の通りで、値0はトレースが無効となっているために1行だけ表示して終わっています。

デバッグ出力の行には、先頭に「デバッグ:」と表示さ異なる色で表されていることに注意してください。

PS C:\Work> Set-PSDebug -trace 0; ./Debug.ps1
デバッグ:    1+ Set-PSDebug -trace 0; ./Debug.ps1

-Traceに1を指定した場合は行トレースとなりますので、すべての行がデバッグ表示されます。

-Traceに1を指定した場合

PS C:\Work> Set-PSDebug -trace 1; ./Debug.ps1
デバッグ:    1+ Set-PSDebug -trace 1; ./Debug.ps1
デバッグ:    1+ $a = 2
デバッグ:    2+ $b = 3
デバッグ:    3+ $c = $a + $b
デバッグ:    4+ Write-Debug "Line4: $c"
デバッグ:    5+ $a = 4
デバッグ:    6+ $b = 5
デバッグ:    7+ $c = $a + $b
デバッグ:    8+ Write-Debug "Line8: $c"

-Traceに2を指定した場合

-Traceに2を指定した場合は変数の代入、関数呼び出しなど、各行で行われている詳細情報を見ることができます。

PS C:\Work> Set-PSDebug -trace 2; ./Debug.ps1
デバッグ:    1+ Set-PSDebug -trace 2; ./Debug.ps1
デバッグ:     ! CALL script 'Debug.ps1'
デバッグ:    1+ $a = 2
デバッグ:     ! SET $a = '2'.
デバッグ:    2+ $b = 3
デバッグ:     ! SET $b = '3'.
デバッグ:    3+ $c = $a + $b
デバッグ:     ! SET $c = '5'.
デバッグ:    4+ Write-Debug "Line4: $c"
デバッグ:    5+ $a = 4
デバッグ:     ! SET $a = '4'.
デバッグ:    6+ $b = 5
デバッグ:     ! SET $b = '5'.
デバッグ:    7+ $c = $a + $b
デバッグ:     ! SET $c = '9'.
デバッグ:    8+ Write-Debug "Line8: $c"

上記を見るとわかるように、一番最初に関数呼び出しを行っているので

! CALL script 'Debug.ps1'

と表示されています。

また、変数に値がセットされるときは

SET $a = '2'.

のように表示されていることがわかります。

 

上記をまとめると

-Traceは、どの行を通って来たかを確認するだけであれば"1"を、詳細情報(変数にセットされた情報、関数呼び出しなど)を得たい場合には"2"を指定すれば良いことがわかります。

うまく使い分けて、デバッグに活用してみてください。

Sunday, July 13, 2008 10:19:04 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: