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.
Ogólne wprowadzenie do debugera programu VS Code można znaleźć w temacie Debugowanie w programie Visual Studio Code.
Przykłady debugowania plików i modułów skryptów programu PowerShell można znaleźć w temacie Using Visual Studio Code for remote editing and debug (Używanie programu Visual Studio Code do zdalnego edytowania i debugowania).
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:
W palecie poleceń uruchom polecenie Konfiguruj zadanie kompilacji domyślnej.
W oknie dialogowym Wybieranie zadania do skonfigurowania wybierz pozycję Utwórz plik tasks.json z szablonu.
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:
W palecie poleceń uruchom polecenie Uruchom zadanie kompilacji.
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
Instalowanie rozszerzenia języka C# dla programu Visual Studio Code
W okienku Debugowanie dodaj konfigurację debugowania
Select environment
W oknie dialogowym wybierz pozycję.NET Core
Plik
launch.json
jest otwierany w edytorze. Gdy kursor znajduje się wewnątrzconfigurations
tablicy, zostanie wyświetlonyconfiguration
selektor. Jeśli ta lista nie jest widoczna, wybierz pozycję Dodaj konfigurację.Aby utworzyć domyślną konfigurację debugowania, wybierz pozycję Uruchom aplikację konsolową platformy .NET Core:
name
Edytuj pola ,program
,args
iconsole
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 program
pwsh
, 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:
name
powinna byćPowerShell cmdlets: powershell
type
powinna byćclr
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.
Umieść punkt przerwania w kodzie źródłowym polecenia cmdlet, które chcesz debugować:
Punkt przerwania jest wyświetlany jako czerwona kropka w rynnie
Upewnij się, że w menu rozwijanym konfiguracji konfiguracji w widoku debugowania wybrano odpowiednią konfigurację poleceń cmdlet programu PowerShell:
Naciśnij klawisz F5 lub kliknij przycisk Rozpocznij debugowanie
Przejdź do okienka terminalu i wywołaj polecenie cmdlet:
Wykonanie zatrzymuje się w punkcie przerwania:
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.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla