SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 入門

Windows PowerShell 入門(10)-デバッグ編

デバッグ処理

  • X ポスト
  • このエントリーをはてなブックマークに追加

この連載では、Microsoftが提供している新しいシェル、Windows PowerShellの使い方を解説します。今回は、PowerShellがもち備えているデバッグ機能について説明します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 この連載では、Microsoftが提供している新しいシェル「Windows Power Shell」の使い方を解説します。今回はPowerShellにおけるデバッグ方法について説明します。

これまでの記事

対象読者

  • Windows PowerShellでコマンドレット操作ができる方
  • 何らかのプログラミング経験があればなお良い

必要環境

  • Windows PowerShell

デバッグメッセージの出力

 PowerShellではデバッグ用のメッセージを表示しながら開発が行えるように、Write-Debugという専用のコマンドレットを備えています。

 コンソールにメッセージを表示するコマンドレットとしてはWrite-Hostコマンドレットがありますが、両者には次のような違いがあります。

  • Write-Hostコマンドレットは、実行すれば必ず表示を行う。
  • Write-Debugコマンドレットは、$DebugPreferenceシェル変数によって表示制御が行われる

 $DebugPreferenceシェル変数はデバッグ時の振る舞いを変更する特殊な変数であり、下記の4つの値を指定することが可能です。

$DebugPreferenceに指定できる4つの値
説明
"Continue" Write-Debugに指定されたメッセージを出力
"SilentlyContinue" Write-Debugに指定されたメッセージを出力しない
"Stop" Write-Debugに指定されたメッセージを出力した後、動作を停止
"Inquire" Write-Debugに指定されたメッセージを出力後、続行するかを確認

 下記スクリプトを準備して(ここでは「C:\Work\Debug.ps1」として保存)、$DebugPreferenceシェル変数のそれぞれの値の挙動を確認してみたいと思います。

C:\Work\Debug.ps1
$a = 2
$b = 3
$c = $a + $b
Write-Debug "Line4: $c"
$a = 4
$b = 5
$c = $a + $b
Write-Debug "Line8: $c" 

 Debug.ps1の各行の意味は下記の通りです。

  • 1行目:$aに2を代入
  • 2行目:$bに3を代入
  • 3行目:$aと$bの和を$cに代入
  • 4行目:Write-Debugコマンドレットによる文字列の出力。ここでは「Line4:」と変数$cに代入された値が連結した文字列を出力。
  • 5行目:$aに4を代入
  • 6行目:$bに5を代入
  • 7行目:$aと$bの和を$cに代入
  • 8行目:Write-Debugコマンドレットによる文字列の出力。ここでは「Line8:」と変数$cに代入された値が連結した文字列を出力。

 Continue

 $DebugPreferenceに値Continueを設定した場合の動作を見てみましょう。

 まずは、下記のようにして $DebugPreferenceの設定を変更します。

PS C:\Work> $DebugPreference = "Continue"

 次に、作成したスクリプトを実行してみましょう。

C:\Work\Debug.ps1の実行
PS C:\Work> ./Debug.ps1
デバッグ: Line4: 5
デバッグ: Line8: 9

 Write-Debugコマンドレットに指定したメッセージを出力することがわかります。

SilentlyContinue

 $DebugPreferenceに値SilentlyContinueを設定した場合の動作を見てみましょう。

 まずは、下記のようにして $DebugPreferenceシェル変数の設定を変更します。

PS C:\Work> $DebugPreference = "SilentlyContinue"

 スクリプトを実行します。

PS C:\Work> ./Debug.ps1
PS C:\Work>

 スクリプト中の4行目と8行目にあるWrite-Debugに指定したメッセージは出力されずに終了することがわかります。

Stop

 $DebugPreferenceに値Stopを設定した場合の動作を見てみましょう。

 まずは、下記のようにして $DebugPreferenceシェル変数の設定を変更します。

$DebugPreferenceシェル変数に"Stop"を設定
PS C:\Work> $DebugPreference = "Stop"

 スクリプトを実行します。

PS C:\Work> ./Debug.ps1
デバッグ: Line4: 5
Write-Debug : シェル変数 "DebugPreference" が Stop に設定されているため、コマンドの実行が停止されました
発生場所 C:\Work\Debug.ps1:4 文字:12
+ Write-Debug  <<<< "Line4: $c"

 1つめのWrite-Debugで指定されたメッセージを表示した後、エラーメッセージを表示して処理を中断することが分かります。

Inquire

 $DebugPreferenceに値Inquireを設定した場合の動作を見てみましょう。

 まずは、下記のようにして $DebugPreferenceシェル変数の設定を変更します。

$DebugReferenceシェル変数に"Inqure"を設定
PS C:\Work> $DebugPreference = "Inquire"

 スクリプトを実行します。

PS C:\Work> ./Debug.ps1
デバッグ: Line4: 5
確認
この操作を続行しますか?
[Y] はい(Y)  [A] すべて続行(A)  [H] コマンドの中止(H)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

 1つめのWrite-Debugで指定されたメッセージを表示した後に、スクリプトを実行するかを確認してくることがわかります。

 ここで[Y]または[A]を押すと、スクリプトが続行されます。

確認
この操作を続行しますか?
 [Y] はい(Y) [A] すべて続行(A) [H] コマンドの中止(H) [S] 中断(S) [?] ヘルプ (既定値は "Y"): 
デバッグ: Line8: 9 

確認
この操作を続行しますか?
[Y] はい(Y)  [A] すべて続行(A)  [H] コマンドの中止(H)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

 このように、Write-Debugコマンドレットと$DebugPreference変数を使用することで、デバッグメッセージの出力の振る舞いを制御することが可能です。

次のページ
Set-PSDebugコマンドレットによるデバッグ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Windows PowerShell 入門連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3067 2008/10/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング