Udostępnij za pomocą


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 przyjęto, że zapoznałeś się z wytycznymi zawartymi w poradniku Pisanie Przenośnych Modułów i je wykonałeś.

Tworzenie zadania kompilacji

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

Konfigurowanie zadania kompilacji:

  1. W palety poleceńuruchom Skonfiguruj domyślne zadanie kompilacji.

    Uruchom Konfigurowanie domyślnego zadania kompilacji

  2. W oknie dialogowym Wybierz zadanie 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 plik tasks.json.

Aby przetestować zadanie kompilacji:

  1. W Command Paletteuruchom polecenie Uruchom zadanie kompilacji.

  2. W oknie dialogowym Wybierz zadanie kompilacji do uruchomienia wybierz pozycję kompilacji.

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 tekst Project file doesn't exist, należy edytować plik tasks.json. 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 być umieszczony po wpisie build na liście args 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 zostaje zablokowana. Podczas uruchamiania zadania kompilacji bez zamykania sesji terminalu wyświetlany jest 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. Zainstaluj rozszerzenie C# dla programu Visual Studio Code

  2. W okienku Debugowanie dodaj konfigurację debugowania

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

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

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

    Uruchom aplikację konsolową .NET Core

  6. Edytuj pola name, 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 program służy do uruchamiania pwsh, aby można było uruchomić debugowane polecenie cmdlet. Argument -NoExit uniemożliwia zakończenie sesji programu PowerShell zaraz po zaimportowaniu modułu. Ścieżka w argumencie Import-Module jest domyślną ścieżką danych wyjściowych kompilacji, gdy postępujesz zgodnie z przewodnikiem Pisanie modułów przenośnych. Jeśli utworzono manifest modułu (plik.psd1), 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.

Notatka

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 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 to powinno być PowerShell cmdlets: powershell

  2. type to powinno być clr

  3. program to powinno być powershell

    Powinien 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 Shift+F5. Powłoka używana do debugowania kończy działanie i zwalnia blokadę skompilowanego pliku DLL.