PowerShellスクリプトのデバッグは、Visual Stuido Code
+PowerShell拡張
で提供されている機能を利用することによりエディタ上でデバックを行うことができます。
これとは別に、PowerShell
ではデバック用のコマンドレットが用意されており。 これらのコマンドレットを利用することによりコマンドラインセッション上でデバックをする事ができます。
今回はデバック用コマンドレットを利用して、コマンドラインセッション上でデバックをしてみます。
ドキュメント
実行環境
- Windows 21H2
- 7.3.0-preview.6
コマンドレットでデバックしてみる
[string]$var1 = "hello"
[string]$var2 = "world"
[string]$var3 = $var1 + $var2
Write-Host "var1:$var1"
Write-Host "var2:$var2"
Write-Host "var3:$var3"
[int]$int1=100
[int]$int2=100
[int]$int3=$int1 * $int2
Write-Host "int1:$int1"
Write-Host "int2:$int2"
Write-Host "int3:$int3"
今回、上記のPowerShellスクリプトをデバッグで利用してみます。
c:\temp\test.ps1
の1行目にSet-PSBreakpoint
でブレイクポイントを設定します。
Set-PSBreakpoint =Line 1 -Script c:\temp\test.ps1
ブレイクポイントが設定された状態で、test.ps1
を実行してみます。
1行目にブレイクポイントを設定したので、ヒットして処理がとまり。
[DBG]:
と入力を受け付ける状態となりました。
表示されたコメントにh
or ?
でhelpがみれると記載されているので実行してみます。
ステップイン、ステップオーバー、ステップアウトするには s
, v
, o
処理継続 c
処理を抜ける q
ソースコードの確認はl
でできるようです。
lを入力してソースコードを確認してみます。
ソースコードが表示されました、また1行名に*
がついていますが、これが現在の行を表しているようです。
今現在、1行目が実行前の状態となるので、この状態でget-variable "var*" , "int*"
と入力して、現在の変数の状態を確認してみます。
1行目が実行前の状態なので、スクリプト中でつかっている var1,var2,var3,int1,int2,int3の変数がまだGet-Variableコマンドレットでは表示されない事が確認できます。
s
でステップインをしてから、もう一度Get-Variableコマンドレットで変数を取得してみます。
ステップインで2行目に移動したため、1行目の[string]$var1 = "hello"
が実行され変数$var1がGet-Variableコマンドレットに表示されるようになりました。
これでコマンドラインセッション内でデバッグができる事を確認できたかと思います。
あとは適宜ステップを進めていき、変数の状態や処理を確認したり。
q
で画面を抜けたり、c
で処理を継続したり操作を行います。
設定しているブレイクポイントを確認・削除してみる
Get-PSBreakpoint
コマンドレットで現在設定されているブレイクポイントが確認できます。
ここで確認できる一覧をパイプでRemove-PSBreakpoint
で渡せば、設定されているブレイクポイントを一括で解除する事ができます。
Get-PSBreakpoint | Remove-PSBreakpoint
設定しているブレイクポイントを無効化・有効化してみる
ブレイクポイントを削除するだけでなく、Disable-PSBreakpoint
、Enable-PSBreakpoint
コマンドレットを使い無効化、有効化をすることもできます。
色々な条件のブレイクポイントを設定してみる
まずはtest.ps1
の1行目にブレイクポイントを設定して、動き方を確認してみましたが。
Set-PSBreakpointでは
- 行ブレイクポイント(-Line)
- コマンドブレイクポイント(-Command)
- 変数ブレイクポイント(-Variable)
が利用できます。
行ブレイクポイント
さきほどやりましたが、行ブレイクポイントはLineオプションで行ブレイクポイントを設定します。
Set-PSBreakpoint =Line 1 -Script c:\temp\test.ps1
コマンドブレイクポイント
コマンドブレイクポイントはCommandオプションを利用して設定します。
今回はSet-PSBreakpoint -Command "Write-Host" -Script C:\temp\test.ps1
とし、Write-Host
にブレイクポイントを設定します。
この状態でc:\temp\test.ps1
を実行してみます。
5行目のWrite-Hostでブレイクされた事が確認できます。
この状態で継続c
を入力すれば、次にWrite-Hostが出てくる所でまたとまります。
変数ブレイクポイント
変数ブレイクポイントではVariableオプションで変数名を指定し、Modeオプションで変数が読み書きされた時にブレイクするように設定します。
今回は変数int1が読み書きされる際にブレイクするよう設定してみました。
Set-PSBreakpoint -Variable "int1" -Mode ReadWrite -Script C:\temp\test.ps1
この状態でc:\temp\test.ps1
を実行すると、9行目で変数int1に値を代入しようとする所でブレイクされます。
総評
PowerShellプロンプトで作業中にほんのちょっとデバッグしたい等の時に、これを知っておけば便利かと思います。