このガイドでは、Visual Studio Code (VS Code) と C# 拡張機能を使用して、コンパイル済み PowerShell モジュールの C# ソース コードを対話形式でデバッグする方法について説明します。
Visual Studio Code デバッガーに関する知識があるとします。
VS Code デバッガーの一般的な概要については、「Visual Studio Code でのデバッグ」を参照してください。
PowerShell スクリプト ファイルとモジュールのデバッグの例については、「のリモート編集とデバッグに Visual Studio Code を使用する」を参照してください。
このガイドでは、ポータブル モジュールの作成に関する ガイドの手順を読み、それに従っていることを前提としています。
ビルド タスクの作成
デバッグ セッションを起動する前に、プロジェクトを自動的にビルドします。 再構築により、最新バージョンのコードを確実にデバッグできます。
ビルド タスクを構成します。
コマンド パレットで、[既定のビルド タスクの構成] コマンド 実行します。
既定のビルド タスクの構成 を実行する
[ 構成するタスクの選択] ダイアログで、[テンプレート から tasks.json ファイル作成] を選択します。
[タスク テンプレートを選択] ダイアログで、[.NET Core] を選択します。
新しい tasks.json
ファイルがまだ存在しない場合は作成されます。
ビルド タスクをテストするには:
[コマンド パレット]で、[ビルド タスクの実行] コマンドを実行します。
[Select the build task to run]\(実行するビルド タスクを選択\) ダイアログで、 [ビルド] を選択します。
ロックされている DLL ファイルに関する情報
既定では、ビルドが成功してもターミナル ウィンドウに出力は表示されません。 "プロジェクトファイルが存在しません" というテキストが含まれる出力が表示される場合は、tasks.json
ファイルを編集する必要があります。
"${workspaceFolder}/myModule"
として表される C# プロジェクトへの明示的なパスを含めます。 この例では、myModule
はプロジェクト フォルダーの名前です。 このエントリは、次のように build
リストの args
エントリの後に移動する必要があります。
{
"label": "build",
"command": "dotnet",
"type": "shell",
"args": [
"build",
"${workspaceFolder}/myModule",
// Ask dotnet build to generate full paths for file names.
"/property:GenerateFullPaths=true",
// Do not generate summary otherwise it leads to duplicate errors in Problems panel
"/consoleloggerparameters:NoSummary",
],
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
デバッグ時に、モジュール DLL が VS Code ターミナルの PowerShell セッションにインポートされます。 DLL がロックされます。 ターミナル セッションを閉じずにビルド タスクを実行すると、次のメッセージが表示されます。
Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.
再構築する前に、ターミナル セッションを閉じる必要があります。
デバッガーの設定
PowerShell コマンドレットをデバッグするには、カスタム起動構成を設定する必要があります。 この構成は、次の用途に使用されます。
- ソース コードをビルドする
- モジュールが読み込まれた状態で PowerShell を起動する
- ターミナル ウィンドウで PowerShell を開いたままにします
ターミナル セッションでコマンドレットを呼び出すと、デバッガーはソース コードに設定されているブレークポイントで停止します。
PowerShell の launch.json の構成
C# for Visual Studio Code 拡張機能をインストールする
[デバッグ] ウィンドウで、デバッグ構成を追加します
[
Select environment
] ダイアログで、[.NET Core
] を選択します。launch.json
ファイルがエディターで開きます。configurations
配列内にカーソルを置くと、configuration
ピッカーが表示されます。 このリストが表示されない場合は、 [構成の追加] を選択します。既定のデバッグ構成を作成するには、[Launch .NET Core Console App ] を選択します。
.NET Core コンソール アプリ を起動
name
、program
、args
、およびconsole
フィールドを次のように編集します。{ "name": "PowerShell cmdlets: pwsh", "type": "coreclr", "request": "launch", "preLaunchTask": "build", "program": "pwsh", "args": [ "-NoExit", "-NoProfile", "-Command", "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll", ], "cwd": "${workspaceFolder}", "stopAtEntry": false, "console": "integratedTerminal" }
program
フィールドは、デバッグ中のコマンドレットを実行できるように、pwsh
を起動するために使用されます。
-NoExit
引数を指定すると、モジュールがインポートされるとすぐに PowerShell セッションが終了できなくなります。
Import-Module
引数のパスは、ポータブル モジュールの作成 ガイドの に従った場合の既定のビルド出力パスです。 モジュール マニフェスト (.psd1
ファイル) を作成した場合は、代わりにそのパスを使用する必要があります。
/
パスの区切り記号は、Windows、Linux、および macOS で動作します。 デバッグする PowerShell コマンドを実行するには、統合ターミナルを使用する必要があります。
手記
デバッガーがブレークポイントで停止しない場合は、Visual Studio Code デバッグ コンソールで次のような行を探します。
Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
これが表示された場合は、("justMyCode": false
と同じレベルで) 起動構成に "console": "integratedTerminal"
を追加します。
Windows PowerShell の launch.json の構成
この起動構成は、Windows PowerShell (powershell.exe
) でコマンドレットをテストするために機能します。
次の変更を加えた 2 つ目の起動構成を作成します。
name
をPowerShell cmdlets: powershell
にすべきですtype
をclr
にすべきですprogram
をpowershell
にすべきです次のようになります。
{ "name": "PowerShell cmdlets: powershell", "type": "clr", "request": "launch", "preLaunchTask": "build", "program": "powershell", "args": [ "-NoExit", "-NoProfile", "-Command", "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll", ], "cwd": "${workspaceFolder}", "stopAtEntry": false, "console": "integratedTerminal" }
デバッグ セッションの起動
これで、デバッグを開始する準備が整いました。
デバッグするコマンドレットのソース コードにブレークポイントを配置します。
ブレークポイントは、余白の に赤い点として表示されます。
デバッグ ビューの構成ドロップダウン メニューで、関連する PowerShell コマンドレット 構成が選択されていることを確認します。
起動構成 を選択します
F5 を押してください、または [デバッグの開始] ボタンをクリックしてください
ターミナル ウィンドウに切り替えて、コマンドレットを呼び出します。
コマンドレット を呼び出す
ブレークポイントで実行が停止します。
ブレークポイント で実行が停止する
ソース コードをステップ実行したり、変数を調べたり、呼び出し履歴を調べたりできます。
デバッグを終了するには、デバッグ ツール バー [停止] をクリックするか、Shift キーを押+F5キーを押します。 デバッグに使用されるシェルが終了し、コンパイル済み DLL ファイルのロックが解放されます。
PowerShell