こんにちは。チェシャ男です。(-皿-)
今回は、
【PowerShell でプロセスをデバッグする方法】
についてご紹介します。
Debug-Process コマンドレットを用いることで実行中の任意のプロセスに対してデバッグを行うことができます。
しかし、Debu-Process はデバッガーを呼び出すことができるだけでデバッグ自体ができるわけではないようです。。。
PowerShell で実行中のプロセスを取得する方法についてはこちら↓の記事をご参考ください。
[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/system-service/get-process/”]
もくじ
実行中のプロセスをデバッグする
プロセスのデバッグを行うコマンドレットに
Debug-Process
というものがあります。
【コマンドレット】
Debug-Process
【オプション】
パターン1(プロセス名で指定)
-Name <プロセス名>パターン2(プロセスIDで指定)
-Id <プロセスID>パターン3(オブジェクトで指定)
-InputObject <プロセスオブジェクト>【入力】
System.Int32
System.String
System.Diagnostics.Process【出力】
None
【エイリアス】
なし
「プロセスとは何か」については「プロセスとは…」をご覧下さい。
デバッグやデバッガーとは?
デバッグとは、
コンピュータプログラムに潜む欠陥を探して取り除くこと。
デバッグとは|debug|デバグ - 意味 / 定義 / 解説 / 説明 : IT用語辞典/© 1997-2017 Incept Inc.
であると、e-Words 先生に説明があります。
プログラム・アプリケーションなどが設計者や開発者の想定していない誤作動を起こした際の原因の事をバグ(bug:むし)と言い、バグを取り除くのでデバッグと言うそうです。
よくゲームをプレイしていて
- セーブしようとしたらフリーズした!
- アイテム買ったのに持ってない!
なんてことがあった時に「バグってる!」と言いますよね。
またデバッグ作業を補助・効率化してくれるツールの事をデバッガーやデバッグツールといいます。
PowerShell のエディタとしてインストールされている PowerShell ISE にもデバッグ機能が搭載されていてます。
写真のようにメニューからデバッグ機能を使用することができます。
デバッガーをプロセスにアタッチできません!
では、いよいよ実行です。PowerShell でデバッグとなるとどのような感じなのでしょうかね~
使い方は、
Debug-Process -Name プロセス名
Debug-Process -Id プロセスID
Debug-Process -InputObject プロセスオブジェクト
のいずれか用います。
メモ帳 (notepad.exe) を起動してデバッグしてみると…
PS C:\work> #デバッグするためのプロセスを起動する PS C:\work> Start-Process -FilePath notepad -PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 56 4 2732 5176 55 0.00 4432 1 notepad PS C:\work> #プロセスIDが4432に対してデバッグ PS C:\work> Debug-Process -Name notepad Debug-Process : このコマンドは、エラーです のため、デバッガーをプロセスにアタッチできません。既定のデバッガーが利用できないことが原因です。 + CategoryInfo : InvalidOperation: (:) [Debug-Process]、InvalidOperationException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.DebugProcessCommand
むむむ…
デバッガーをプロセスにアタッチできません。
既定のデバッガーが利用できないことが原因です。
というエラーが出ました。
つまり PowerShell でデバッグするのではなく、デバッグ機能を持った Visual Studio などのデバッガー環境が必要なようです。
なんだかちょっと残念です.. _(Ξ皿Ξ _) ∠)_
(※デバッガーをインストールしてアタッチできるようになったらまた更新しようと思います。)
まとめ
実行中のプロセスをバッグするには
Debug-Process <対象プロセス>
を実行する。
ただしデバッガーが必要である。