LoginSignup
1
0

PowerShellのコマンドラインセッション内でデバッグしてみる

Last updated at Posted at 2022-08-01

PowerShellスクリプトのデバッグは、Visual Stuido Code+PowerShell拡張で提供されている機能を利用することによりエディタ上でデバックを行うことができます。

これとは別に、PowerShellではデバック用のコマンドレットが用意されており。 これらのコマンドレットを利用することによりコマンドラインセッション上でデバックをする事ができます。

今回はデバック用コマンドレットを利用して、コマンドラインセッション上でデバックをしてみます。

ドキュメント

about_Debuggers

debugging-from-commandline.md

実行環境

  • Windows 21H2
  • 7.3.0-preview.6

コマンドレットでデバックしてみる

c:\temp\test.ps1
[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

image.png

ブレイクポイントが設定された状態で、test.ps1を実行してみます。

image.png

1行目にブレイクポイントを設定したので、ヒットして処理がとまり。
[DBG]:と入力を受け付ける状態となりました。

表示されたコメントにh or ? でhelpがみれると記載されているので実行してみます。

image.png

ステップイン、ステップオーバー、ステップアウトするには s , v , o
処理継続 c
処理を抜ける q
ソースコードの確認はl

でできるようです。

lを入力してソースコードを確認してみます。

ソースコードが表示されました、また1行名にがついていますが、これが現在の行を表しているようです。

image.png

今現在、1行目が実行前の状態となるので、この状態でget-variable "var*" , "int*"と入力して、現在の変数の状態を確認してみます。

image.png

1行目が実行前の状態なので、スクリプト中でつかっている var1,var2,var3,int1,int2,int3の変数がまだGet-Variableコマンドレットでは表示されない事が確認できます。

sでステップインをしてから、もう一度Get-Variableコマンドレットで変数を取得してみます。

image.png

ステップインで2行目に移動したため、1行目の[string]$var1 = "hello"が実行され変数$var1がGet-Variableコマンドレットに表示されるようになりました。

これでコマンドラインセッション内でデバッグができる事を確認できたかと思います。

あとは適宜ステップを進めていき、変数の状態や処理を確認したり。
qで画面を抜けたり、cで処理を継続したり操作を行います。

設定しているブレイクポイントを確認・削除してみる

Get-PSBreakpointコマンドレットで現在設定されているブレイクポイントが確認できます。

image.png

ここで確認できる一覧をパイプでRemove-PSBreakpointで渡せば、設定されているブレイクポイントを一括で解除する事ができます。

Get-PSBreakpoint | Remove-PSBreakpoint

image.png

設定しているブレイクポイントを無効化・有効化してみる

ブレイクポイントを削除するだけでなく、Disable-PSBreakpointEnable-PSBreakpointコマンドレットを使い無効化、有効化をすることもできます。

image.png

image.png

色々な条件のブレイクポイントを設定してみる

まずは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にブレイクポイントを設定します。

image.png

この状態でc:\temp\test.ps1を実行してみます。

image.png

5行目のWrite-Hostでブレイクされた事が確認できます。
この状態で継続cを入力すれば、次にWrite-Hostが出てくる所でまたとまります。

変数ブレイクポイント

変数ブレイクポイントではVariableオプションで変数名を指定し、Modeオプションで変数が読み書きされた時にブレイクするように設定します。

今回は変数int1が読み書きされる際にブレイクするよう設定してみました。

Set-PSBreakpoint -Variable "int1" -Mode ReadWrite -Script C:\temp\test.ps1

image.png

この状態でc:\temp\test.ps1を実行すると、9行目で変数int1に値を代入しようとする所でブレイクされます。

image.png

総評

PowerShellプロンプトで作業中にほんのちょっとデバッグしたい等の時に、これを知っておけば便利かと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0