読者です 読者をやめる 読者になる 読者になる

qshinoの日記

Powershell関係と徒然なこと

Powershell デバッグ

powershell

Powershell Debug

デバック機能一覧

  1. write-host
  2. write-debug
  3. write-verbose
  4. write-progress
  5. Set-PSDebug
  6. Break point $host.EnterNestedPrompt()

  7. Write-Warning/Error

write-host

コンソール出力。

write-verbose

$VerbosePreferenceにより挙動を変更可能。挙動設定はWrite-Debugの項目を参照。-Verboseを指定した場合、挙動はContinueとなる。(PS5.0実機確認結果)

write-progress

Debugとは毛並みが異なる。

詳細は下記を参照

https://msdn.microsoft.com/en-us/powershell/reference/5.0/microsoft.powershell.utility/write-progress

Write-Debug

$DebugPreferenceにより挙動を変更可能。-Debug を指定した場合、Inquire となる。PS3.0実機確認結果。

$DebugPreference

DebugPreferenceに指定できる4つの値

  1. Continue
  2. SilentlyContinue
  3. Stop
  4. Inquire

Set-PSDebug

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

無効にする

Set-PSDebug -off

-Trace 数値

0 無効 1 行 2 式

-Strict

未定義変数の参照により停止

-Step

ステップ実行

Write-Warning/Error

デバッグモードに関わらず表示される。参考まで。

デバック方法

  1. Write-Verbose : デバック出力したい箇所に挿入。-Verboseオプションで表示される。
  2. Write-Debug: 止めたい場所に、Write-Debugを追加。-Debugオプションで、問い合わせが出る。
  3. Set-PSDebug : トレースしたい場合に使用。

デバックモードに入る方法

  1. Write-Debug コードにWrite-Debug を追加し、-Debugオプションを指定する。Write-Debugの箇所で、継続か中断の問い合わせが表示される。但し、[cmdletbinding()] と Param()を対象スクリプトか関数に指定する必要あり。

  2. Set-PSBreakPoint 本コマンドによりブレークポイント設定

  3. PowerShell ISE スクリプト表示画面でブレークポイントを設定する。

  4. (PS5.0?) コンソールでCtrl-Break

  5. (PS5.0?) ISEでCtrl-B

デバックモード時のコマンド

  • ステップイン F11 or S
  • ステップアウト Shift-F11 or O
  • ステップオーバー F10 or V
  • 続行 F5 or C
  • 停止 Shift-F5 or Q
  • 呼び出し履歴表示 Ctrl-Shift-D or K

表示できない自動変数

  1. $_
  2. $MyInvocation
  3. $args
  4. $Input
  5. $PSBoundParameters

これらを表示するためには、コードで別の変数に代入しておき、その代入された変数をデバッガで表示する。

ストリーム

下記のストリームが使用されている。

  • 0 stdin
  • 1 write-output
  • 2 write-error
  • 3 write-warning
  • 4 write-verbose
  • 5 write-debug
  • 6 write-information

write-xx をリダイレクトするには、 ?>&1 とする。? は上記の1-6。3-5はPS3.0以降、6はPS5.0以降で使用可能。

例) write-verbose

test.ps1   4>&1 > log.txt

上記でtest.ps1 スクリプトのWrite-Verboseをlog.txtファイルにリダイレクトする。

例) Write-Error

test.ps1  2>&1  | tee log.txt

上記で、write-errorを標準出力とlog.txtファイルに出力する。

参考ストリーム

http://stknohg.hatenablog.jp/entry/2015/06/26/001944

参考デバックモード

https://msdn.microsoft.com/ja-jp/powershell/scripting/core-powershell/ise/how-to-debug-scripts-in-windows-powershell-ise

5.0公式

PowerShell 5.0 https://msdn.microsoft.com/ja-jp/powershell/wmf/5.0/debug_overview

参考

http://codezine.jp/article/detail/3067?p=3