Použití Visual Studio Code k ladění zkompilovaných cmdletů

V této příručce se dozvíte, jak interaktivně ladit zdrojový kód jazyka C# pro zkompilovaný modul PowerShellu pomocí editoru Visual Studio Code (VS Code) a rozšíření jazyka C#.

Předpokládá se znalost ladicího programu editoru Visual Studio Code.

Tato příručka předpokládá, že jste si přečetli a postupovali podle pokynů v příručce Psaní přenositelných modulů.

Vytvoření úlohy sestavení

Před spuštěním ladicí relace automaticky sestavte projekt. Opětovné sestavení zajistí, že budete ladit nejnovější verzi vašeho kódu.

Konfigurace úlohy sestavení:

  1. Na paletě příkazů spusťte příkaz Konfigurovat výchozí úlohu sestavení.

    Spustit Konfiguraci Výchozí Úlohy Sestavení

  2. V dialogovém okně Vyberte úlohu pro konfiguraci zvolte Vytvořit soubor tasks.json ze šablony.

  3. V dialogovém okně Vybrat šablonu úlohy zvolte .NET Core.

Pokud ještě neexistuje, vytvoří se nový soubor tasks.json.

Otestování úlohy sestavení:

  1. Na paletě příkazů spusťte příkaz Spustit úlohu sestavení.

  2. V dialogovém okně Vyberte úlohu sestavení, kterou chcete spustit, zvolte sestavení.

Informace o uzamčení souborů DLL

Ve výchozím nastavení se v podokně terminálu nezobrazuje výstup úspěšného sestavení. Pokud se zobrazí výstup, který obsahuje text soubor projektu neexistuje, měli byste upravit soubor tasks.json. Zahrňte explicitní cestu k projektu jazyka C# vyjádřenou jako "${workspaceFolder}/myModule". V tomto příkladu myModule je název složky projektu. Tato položka musí být za položkou build v seznamu args následujícím způsobem:

    {
        "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"
    }

Během ladění se knihovna DLL modulu naimportuje do relace PowerShellu v terminálu VS Code. Knihovna DLL se uzamkne. Při spuštění úlohy sestavení se zobrazí následující zpráva bez zavření relace terminálu:

Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.

Před opětovném sestavením je nutné zavřít terminálové relace.

Nastavení ladicího programu

Aby bylo možné ladit cmdlet PowerShell, je potřeba nastavit vlastní konfiguraci spuštění. Tato konfigurace se používá k:

  • Sestavení zdrojového kódu
  • Spusťte PowerShell s načteným modulem
  • Nechte PowerShell otevřený v podokně terminálu.

Když vyvoláte svůj cmdlet v terminálové relaci, ladicí program se zastaví na všech zarážkách nastavených ve zdrojovém kódu.

Konfigurace launch.json pro PowerShell

  1. Instalace rozšíření C# pro Visual Studio Code

  2. V okně Ladění přidejte konfiguraci ladění.

  3. V dialogovém okně Select environment zvolte .NET Core

  4. Soubor launch.json se otevře v editoru. Když je kurzor uvnitř pole configurations, zobrazí se selektor configuration. Pokud tento seznam nevidíte, vyberte Přidat konfiguraci.

  5. Pokud chcete vytvořit výchozí konfiguraci ladění, vyberte Spustit konzolovou aplikaci .NET Core:

    Spuštění konzolové aplikace .NET Core

  6. Upravte pole name, program, argsa console následujícím způsobem:

     {
         "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"
     }
    

Pole program slouží ke spuštění pwsh, aby bylo možné spustit laděný cmdlet. Argument -NoExit zabrání ukončení relace PowerShellu, jakmile se modul naimportuje. Cesta v argumentu Import-Module je výchozí výstupní cesta sestavení, pokud jste postupovali podle průvodce Jak vytvářet přenosné moduly. Pokud jste vytvořili manifest modulu (soubor.psd1), měli byste místo toho použít cestu k němu. Oddělovač cest / funguje ve Windows, Linuxu a macOS. Ke spuštění příkazů PowerShellu, které chcete ladit, musíte použít integrovaný terminál.

Poznámka

Pokud se ladicí program nezastaví na žádných zarážkách, podívejte se do ladicí konzoly Visual Studio Code na řádek s textem:

Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.

Pokud se zobrazí, přidejte do konfigurace spuštění "justMyCode": false (na stejné úrovni jako "console": "integratedTerminal".

Konfigurace launch.json pro Windows PowerShell

Tato konfigurace spuštění funguje pro testování rutin ve Windows PowerShellu (powershell.exe). Vytvořte druhou konfiguraci spuštění s následujícími změnami:

  1. name by mělo být PowerShell cmdlets: powershell

  2. type by mělo být clr

  3. program by mělo být powershell

    Měl by vypadat takto:

     {
         "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"
     }
    

Spuštění ladicí relace

Nyní je všechno připravené k zahájení ladění.

Můžete procházet zdrojový kód, kontrolovat proměnné a kontrolovat zásobník volání.

Chcete-li ukončit ladění, klepněte na tlačítko Zastavit na panelu nástrojů ladění nebo stiskněte Shift+F5. Prostředí použité pro ladění ukončí a uvolní zámek u zkompilovaného souboru DLL.