Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak ladit skripty v místním počítači pomocí funkcí vizuálního ladění integrovaného skriptovacího prostředí (ISE) prostředí Windows PowerShell.
Správa zarážek
Zarážka je určené místo ve skriptu, ve kterém chcete operaci pozastavit, abyste mohli prozkoumat aktuální stav proměnných a prostředí, ve kterém je skript spuštěný. Jakmile je váš skript pozastaven zarážkou, můžete spustit příkazy ve konzoli a prozkoumat stav skriptu. Můžete vypsat proměnné nebo spustit jiné příkazy. Můžete dokonce upravit hodnotu všech proměnných, které jsou viditelné v kontextu aktuálně spuštěného skriptu. Po prozkoumání toho, co chcete vidět, můžete pokračovat v provozu skriptu.
V prostředí ladění Windows PowerShellu můžete nastavit tři typy zarážek:
přerušení řádku. Skript se pozastaví při dosažení určeného řádku během operace skriptu.
Proměnná zarážka. Skript se pozastaví při každé změně hodnoty určené proměnné.
Bod přerušení (příkaz) Skript se pozastaví při každém spuštění určeného příkazu během operace skriptu. Může obsahovat parametry pro upřesnění filtrování zarážky na konkrétní požadovanou operaci. Příkazem může být také funkce, kterou jste vytvořili.
Z těchto možností lze v prostředí ladění ISE prostředí Windows PowerShell nastavit pouze zarážky řádků pomocí nabídky nebo klávesových zkratek. Další dva typy zarážek je možné nastavit, ale nastavují se z podokna konzoly pomocí rutiny Set-PSBreakpoint. Tato část popisuje, jak můžete provádět úlohy ladění v prostředí Windows PowerShell ISE pomocí nabídek, které jsou k dispozici, a provádět širší škálu příkazů z podokna konzoly pomocí skriptování.
Nastavit zarážku
Zarážku lze nastavit ve skriptu až po uložení. Klikněte pravým tlačítkem myši na řádek, kam chcete nastavit zarážku, a potom klikněte na Přepnout zarážku. Nebo klikněte na řádek, kde chcete nastavit bod přerušení, a stiskněte F9 nebo v nabídce Debug klikněte na Přepnout bod přerušení.
Následující skript je příkladem toho, jak můžete nastavit proměnnou zarážku z konzolového podokna pomocí rutiny Set-PSBreakpoint.
# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server
Výpis všech zarážek
Zobrazí všechny body přerušení v aktuální relaci Windows PowerShellu.
V nabídce Ladění klepněte na Seznam zarážek. Následující skript představuje příklad, jak můžete zobrazit seznam všech zarážek v konzoli pomocí cmdletu Get-PSBreakpoint.
# This command lists all breakpoints in the current session.
Get-PSBreakpoint
Odstranit zarážku
Odstranění zarážky ji smaže.
Pokud si myslíte, že ho budete chtít později znovu použít, zvažte možnost Zakázat zarážku místo toho. Pravým tlačítkem myši klikněte na řádek, ze které chcete odebrat zarážku, a potom klikněte na ToggleBreakpoint. Nebo klikněte na řádek, ze kterého chcete odstranit zarážku, a v nabídce Ladění klikněte na Přepnout zarážku. Následující skript je příkladem, jak odebrat zarážku se zadaným ID z okna konzole pomocí příkazu cmdlet Remove-PSBreakpoint.
# This command deletes the breakpoint with breakpoint ID 2.
Remove-PSBreakpoint -Id 2
Odebrat všechny zarážky
Chcete-li odebrat všechny zarážky definované v aktuální relaci, v nabídce Ladění klepněte na tlačítko Odebrat všechny zarážky.
Následující skript představuje příklad odebrání všech zarážek z podokna konzoly pomocí rutiny Remove-PSBreakpoint.
# This command deletes all of the breakpoints in the current session.
Get-PSBreakpoint | Remove-PSBreakpoint
Zakažte zarážku
Zakázání zarážky ji neodstraní. Vypne ho, dokud ho nepovolíte. Chcete-li zakázat konkrétní zarážku řádku, klikněte pravým tlačítkem myši na řádek, ve kterém chcete zakázat zarážku, a potom klikněte na Zakázat zarážku.
Nebo klikněte na řádek, kde chcete zarážku zakázat, a stiskněte F9 nebo v nabídce Ladění klikněte na Zakázat zarážku. Následující skript je příkladem, jak můžete odebrat zarážku se zadaným ID z konzolového podokna pomocí rutiny Disable-PSBreakpoint.
# This command disables the breakpoint with breakpoint ID 0.
Disable-PSBreakpoint -Id 0
Zakázat všechny zarážky
Zakázání bodu přerušení jej neodebere; vypne jej, dokud ho nepovolíte. Chcete-li zakázat všechny zarážky v aktuální relaci, v nabídce Ladění klepněte na tlačítko Zakázat všechny zarážky. Následující skript je příkladem toho, jak můžete zakázat všechny zarážky v panelu konzole pomocí rutiny Disable-PSBreakpoint.
# This command disables all breakpoints in the current session.
# You can abbreviate this command as: "gbp | dbp".
Get-PSBreakpoint | Disable-PSBreakpoint
Povolení bodu přerušení
Chcete-li povolit konkrétní zarážku, klikněte pravým tlačítkem myši na čáru, ve které chcete povolit zarážku, a potom klikněte na Povolit zarážku. Nebo klikněte na řádek, kam chcete umístit zarážku, a potom stiskněte F9 nebo v nabídce Ladění klikněte na Povolit zarážku. Následující skript představuje příklad povolení konkrétních zarážek z podokna konzoly pomocí rutiny Enable-PSBreakpoint.
# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
Enable-PSBreakpoint -Id 0, 1, 5
Povolit všechna přerušení
Chcete-li povolit všechny zarážky definované v aktuální relaci, v nabídce Ladění klepněte na tlačítko Povolit všechny zarážky. Následující skript představuje příklad povolení všech zarážek z podokna konzoly pomocí rutiny Enable-PSBreakpoint.
# This command enables all breakpoints in the current session.
# You can abbreviate the command by using their aliases: "gbp | ebp".
Get-PSBreakpoint | Enable-PSBreakpoint
Jak spravovat ladicí relaci
Než začnete s laděním, musíte nastavit jednu nebo více zarážek. Bod přerušení nemůžete nastavit, pokud není skript, který chcete ladit, uložen. Pokyny, jak nastavit zarážku, najdete v tématu Jak spravovat zarážky nebo Set-PSBreakpoint. Po spuštění ladění nemůžete upravovat skript, dokud ladění nezastavíte. Skript, který má nastavenou jednu nebo více zarážek, se před spuštěním automaticky uloží.
Ke spuštění ladění
Stiskněte F5 nebo na panelu nástrojů klikněte na ikonu Spustit skript nebo v nabídce Ladění klikněte na Spustit/Pokračovat. Skript běží, dokud nenarazí na první zarážku. Pozastaví operaci tam a zvýrazní čáru, na které se pozastavila.
Chcete-li pokračovat v ladění
Stiskněte F5 nebo na panelu nástrojů klikněte na ikonu Spustit skript nebo v nabídce Ladění klikněte na Spustit/Pokračovat nebo v podokně konzoly zadejte C a stiskněte ENTER. To způsobí, že se skript bude dál spouštět k další zarážce nebo na konec skriptu, pokud se už na žádné další zarážky nenarazí.
Zobrazení zásobníku volání
Zásobník volání zobrazuje aktuální místo spuštění ve skriptu. Pokud skript běží ve funkci, která byla volána jinou funkcí, je znázorněna v zobrazení dalšími řádky ve výstupu. V dolní části řádku se zobrazí původní skript a řádek, ve kterém byla volána funkce. Řádek výše ukazuje tu funkci a řádek v ní, v němž mohla být volána jiná funkce. Nejvyšší řádek zobrazuje aktuální kontext aktuálního řádku, na kterém je nastavena zarážka.
Když je pozastaveno, pokud chcete zobrazit aktuální zásobník volání, stiskněte CTRL+SHIFT+D nebo v nabídce Ladění klikněte na Zobrazit zásobník volání nebo v podokně konzoly zadejte K a stiskněte ENTER.
K zastavení ladění
Stiskněte SHIFT+F5 nebo v nabídce Ladění klikněte na Zastavit ladicí program, nebo v okně konzole zadejte Q a stiskněte ENTER.
Jak překročit, vstoupit a ukončit krokování při ladění
Krokování je proces postupného provádění jednoho příkazu za druhým. Můžete se zastavit na řádku kódu a prozkoumat hodnoty proměnných a stav systému. Následující tabulka popisuje běžné úkoly ladění, jako je přeskočení, vstup do a opuštění.
| Úloha ladění | Popis | Jak toho dosáhnout v prostředí PowerShell ISE |
|---|---|---|
| Vstup do | Spustí aktuální příkaz a pak se zastaví na dalším příkazu. Pokud je aktuální příkaz funkcí nebo voláním skriptu, pak ladicí program přejde do této funkce nebo skriptu, jinak se zastaví na dalším příkazu. | Stiskněte F11 nebo v nabídce Ladění klikněte na Krok donebo v podokně konzoly zadejte S a stiskněte ENTER. |
| Přeskočit | Spustí aktuální příkaz a pak se zastaví na dalším příkazu. Pokud je aktuální příkaz funkcí nebo voláním skriptu, ladicí program spustí celou funkci nebo skript a zastaví se při dalším příkazu po volání funkce. | Stiskněte F10 nebo v nabídce Ladění klikněte na Krok přesnebo v podokně konzoly zadejte V a stiskněte ENTER. |
| Krok ven | Přechází mimo aktuální funkci a se posune o jednu úroveň výš, pokud je funkce vnořená. Pokud skript běží v hlavní části, pokračuje až do konce, nebo do dalšího bodu přerušení. Přeskočené příkazy se spustí, ale neprojdou. | Stiskněte SHIFT+F11nebo v nabídce Ladění, klikněte na Step Outnebo v podokně konzoly zadejte O a stiskněte ENTER. |
| Pokračovat | Pokračuje v provádění až do konce, nebo k příštímu bodu přerušení. Přeskočené funkce a vyvolání se provádějí, ale není možné projít krok za krokem. | Stiskněte F5 nebo v nabídce Debug klikněte na Spustit/Pokračovat nebo v podokně konzoly zadejte C a stiskněte ENTER. |
Jak zobrazit hodnoty proměnných při ladění
Při procházení kódu můžete zobrazit aktuální hodnoty proměnných ve skriptu.
Zobrazení hodnot standardních proměnných
Použijte jednu z následujících metod:
Ve skriptovacím podokně najeďte myší na proměnnou a zobrazí se její hodnota jako popis.
V podokně konzoly zadejte název proměnné a stiskněte ENTER.
Všechna okna v prostředí ISE jsou vždy ve stejném oboru. Při ladění skriptu se proto příkazy, které zadáte v podokně konzoly, spouští v oboru skriptu. Díky tomu můžete pomocí podokna konzoly najít hodnoty proměnných a volání funkcí, které jsou definovány pouze ve skriptu.
Zobrazení hodnot automatických proměnných
Předchozí metodu můžete použít k zobrazení hodnoty téměř všech proměnných při ladění skriptu. Tyto metody ale nefungují pro následující automatické proměnné.
$_$input$MyInvocation$PSBoundParameters$args
Pokud se pokusíte zobrazit hodnotu kterékoli z těchto proměnných, získáte hodnotu této proměnné v interním kanálu, který ladicí program používá, nikoli hodnotu proměnné ve skriptu. Tento problém můžete obejít pro několik proměnných ($_, $input, $MyInvocation, $PSBoundParametersa $args) pomocí následující metody:
Ve skriptu přiřaďte hodnotu automatické proměnné nové proměnné.
Zobrazte hodnotu nové proměnné tak, že najedete myší na novou proměnnou v podokně skriptů nebo zadáte novou proměnnou v podokně konzoly.
Pokud chcete například zobrazit hodnotu proměnné $MyInvocation, přiřaďte ve skriptu hodnotu nové proměnné, například $scriptName, a potom najeďte myší na proměnnou $scriptName, aby se zobrazila její hodnota.
# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.PSCommandPath
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1