Debugowanie skompilowanych poleceń cmdlet przy użyciu programu Visual Studio Code

W tym przewodniku pokazano, jak interaktywnie debugować kod źródłowy języka C# dla skompilowanego modułu programu PowerShell przy użyciu programu Visual Studio Code (VS Code) i rozszerzenia języka C#.

Zakłada się, że istnieje pewna znajomość debugera programu Visual Studio Code.

W tym przewodniku założono, że przeczytano i wykonano instrukcje opisane w przewodniku Pisanie modułów przenośnych.

Tworzenie zadania kompilacji

Skompiluj projekt automatycznie przed uruchomieniem sesji debugowania. Ponowne kompilowanie zapewnia debugowanie najnowszej wersji kodu.

Konfigurowanie zadania kompilacji:

  1. W palecie poleceń uruchom polecenie Konfiguruj zadanie kompilacji domyślnej.

    Uruchamianie konfigurowania domyślnego zadania kompilacji

  2. W oknie dialogowym Wybieranie zadania do skonfigurowania wybierz pozycję Utwórz plik tasks.json z szablonu.

  3. W oknie dialogowym Wybieranie szablonu zadania wybierz pozycję .NET Core.

Jeśli jeszcze nie istnieje, zostanie utworzony nowy tasks.json plik.

Aby przetestować zadanie kompilacji:

  1. W palecie poleceń uruchom polecenie Uruchom zadanie kompilacji.

  2. W oknie dialogowym Wybieranie zadania kompilacji do uruchomienia wybierz pozycję Kompilacja.

Informacje o zablokowanych plikach DLL

Domyślnie pomyślna kompilacja nie wyświetla danych wyjściowych w okienku terminalu. Jeśli zobaczysz dane wyjściowe zawierające tekstowy plik projektu nie istnieje, należy edytować tasks.json plik. Dołącz jawną ścieżkę do projektu języka C# wyrażonego jako "${workspaceFolder}/myModule". W tym przykładzie myModule jest nazwą folderu projektu. Ten wpis musi przejść po wpisie build na args liście w następujący sposób:

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

Podczas debugowania biblioteka DLL modułu jest importowana do sesji programu PowerShell w terminalu programu VS Code. Biblioteka DLL staje się zablokowana. Podczas uruchamiania zadania kompilacji po zamknięciu sesji terminalu zostanie wyświetlony następujący komunikat:

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

Sesje terminalu należy zamknąć przed ponowną kompilacją.

Konfigurowanie debugera

Aby debugować polecenie cmdlet programu PowerShell, należy skonfigurować niestandardową konfigurację uruchamiania. Ta konfiguracja służy do:

  • Tworzenie kodu źródłowego
  • Uruchamianie programu PowerShell z załadowanym modułem
  • Pozostaw program PowerShell otwarty w okienku terminalu

Podczas wywoływania polecenia cmdlet w sesji terminalu debuger zatrzymuje się w dowolnych punktach przerwania ustawionych w kodzie źródłowym.

Konfigurowanie launch.json dla programu PowerShell

  1. Instalowanie rozszerzenia języka C# dla programu Visual Studio Code

  2. W okienku Debugowanie dodaj konfigurację debugowania

  3. Select environment W oknie dialogowym wybierz pozycję.NET Core

  4. Plik launch.json jest otwierany w edytorze. Gdy kursor znajduje się wewnątrz configurations tablicy, zostanie wyświetlony configuration selektor. Jeśli ta lista nie jest widoczna, wybierz pozycję Dodaj konfigurację.

  5. Aby utworzyć domyślną konfigurację debugowania, wybierz pozycję Uruchom aplikację konsolową platformy .NET Core:

    Uruchamianie aplikacji konsolowej platformy .NET Core

  6. nameEdytuj pola , program, argsi console w następujący sposób:

     {
         "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 jest używane do uruchamiania programpwsh , aby można było uruchomić debugowane polecenie cmdlet. -NoExit Argument uniemożliwia zakończenie sesji programu PowerShell zaraz po zaimportowaniu modułu. Ścieżka w argumencie Import-Module jest domyślną ścieżką wyjściową kompilacji, gdy wykonano instrukcje opisane w przewodniku Pisanie modułów przenośnych. Jeśli utworzono manifest modułu (.psd1 plik), należy użyć ścieżki do tego pliku. Separator / ścieżki działa w systemach Windows, Linux i macOS. Aby uruchomić polecenia programu PowerShell, które chcesz debugować, należy użyć zintegrowanego terminalu.

Uwaga

Jeśli debuger nie zatrzymuje się w żadnym punkcie przerwania, poszukaj w konsoli debugowania programu Visual Studio Code wiersza z informacją:

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

Jeśli to zobaczysz, dodaj "justMyCode": false element do konfiguracji uruchamiania (na tym samym poziomie co "console": "integratedTerminal".

Konfigurowanie launch.json dla programu Windows PowerShell

Ta konfiguracja uruchamiania działa na potrzeby testowania poleceń cmdlet w programie Windows PowerShell (powershell.exe). Utwórz drugą konfigurację uruchamiania z następującymi zmianami:

  1. name powinna być PowerShell cmdlets: powershell

  2. type powinna być clr

  3. program powinna być powershell

    Powinien on wyglądać następująco:

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

Uruchamianie sesji debugowania

Teraz wszystko jest gotowe do rozpoczęcia debugowania.

Możesz przejść przez kod źródłowy, sprawdzić zmienne i sprawdzić stos wywołań.

Aby zakończyć debugowanie, kliknij przycisk Zatrzymaj na pasku narzędzi debugowania lub naciśnij klawisze Shift+F5. Powłoka używana do debugowania kończy działanie i zwalnia blokadę skompilowanego pliku DLL.