Sdílet prostřednictvím


Ladění skriptů v prostředí Windows PowerShell ISE

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 skript pozastavený zarážkou, můžete spustit příkazy v podokně konzoly a prozkoumat stav skriptu. Můžete výstupní 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:

  1. Zarážka řádku Skript se pozastaví při dosažení určeného řádku během operace skriptu.

  2. Proměnná zarážka. Skript se pozastaví při každé změně hodnoty určené proměnné.

  3. Zarážka příkazu 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 další filtrování zarážky pouze na 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 jsou nastavené 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í.

Nastavení zarážky

Zarážku lze nastavit ve skriptu až po uložení. Klikněte pravým tlačítkem myši na čáru, do které chcete nastavit zarážku řádku, a potom klikněte na Přepnout zarážku. Můžete také kliknout na čáru, do které chcete nastavit zarážku řádku, a v nabídce Ladění stisknout klávesu F9 nebo kliknout na Přepnout zarážku.

Následující skript je příkladem toho, jak můžete nastavit zarážku proměnné z podokna konzoly 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 zarážky v aktuální relaci Windows PowerShellu.

V nabídce Ladění klepněte na příkaz Seznam zarážek. Následující skript představuje příklad, jak pomocí rutiny Get-PSBreakpoint zobrazit seznam všech zarážek z podokna konzoly.

# This command lists all breakpoints in the current session.
Get-PSBreakpoint

Odebrání zarážky

Odebrání zarážky ji odstraní.

Pokud si myslíte, že ho budete chtít později znovu použít, zvažte možnost Zakázat zarážku . Klikněte pravým tlačítkem myši na čáru, do které chcete odebrat zarážku, a potom klikněte na ToggleBreakpoint. Nebo klikněte na čáru, ve které chcete odebrat zarážku, a v nabídce Ladění klikněte na Přepnout zarážku. Následující skript představuje příklad odebrání zarážky se zadaným ID z podokna konzoly pomocí rutiny 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

Zakázání zarážky

Zakázání zarážky ho neodebere. Vypne ho, dokud nebude povolený. 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 čáru, do které chcete zarážku zakázat, a v nabídce Ladění stiskněte klávesu F9 nebo klikněte na Zakázat zarážku. Následující skript představuje příklad odebrání zarážky se zadaným ID z podokna konzoly 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í zarážky ho neodebere; vypne ho, dokud nebude povolený. 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 z podokna konzoly 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í zarážky

Pokud chcete povolit konkrétní zarážku, klikněte pravým tlačítkem myši na čáru, do které chcete zarážku povolit, a potom klikněte na Povolit zarážku. Nebo klikněte na řádek, ve kterém chcete povolit zarážku, a potom stiskněte klávesu F9 nebo v nabídce Ladění klepněte na tlačítko 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šechny zarážky

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 je příkladem toho, jak povolit všechny zarážky 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

Správa ladicí relace

Než začnete s laděním, musíte nastavit jednu nebo více zarážek. Zarážku nelze nastavit, pokud se neuloží skript, který chcete ladit. Pokyny k nastavení zarážky najdete v tématu Jak spravovat zarážky nebo Set-PSBreakpoint. Po spuštění ladění nemůžete upravit 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ží.

Spuštění ladění

Stiskněte klávesu 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 se spustí, 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 klávesu F5 nebo na panelu nástrojů klikněte na ikonu Spustit skript nebo v nabídce Ladění , klepněte na příkaz 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 na další zarážku nebo na konec skriptu, pokud nebudou zjištěny žádné další zarážky.

Zobrazení zásobníku volání

Zásobník volání zobrazí aktuální umístění 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. Další řádek ukazuje, že funkce a řádek v ní, ve kterém mohla být volána jiná funkce. Horní řádek zobrazuje aktuální kontext aktuálního řádku, na kterém je zarážka nastavená.

Když je pozastaveno, chcete-li zobrazit aktuální zásobník volání, stiskněte kombinaci kláves CTRL+SHIFT+D nebo v nabídce Ladění klepněte na příkaz Zobrazit zásobník volání nebo v podokně konzoly zadejte K a stiskněte ENTER.

Zastavení ladění

Stiskněte klávesu SHIFT+F5 nebo v nabídce Ladění klepněte na tlačítko Zastavit ladicí program nebo v podokně konzoly zadejte Q a stiskněte klávesu ENTER.

Postup krokování, krokování a krokování při ladění

Krokování je proces spuštění jednoho příkazu najednou. 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é úlohy ladění, jako je krokování, krokování a krokování.

Úloha ladění Popis Jak toho dosáhnout v prostředí PowerShell ISE
Krok 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 klávesu F11 nebo v nabídce Ladění klikněte na krok do podokna konzoly nebo v podokně konzoly zadejte S a stiskněte ENTER.
Krok za krokem 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 klávesu F10 nebo v nabídce Ladění klikněte na Krok přes nebo v podokně konzoly zadejte V a stiskněte ENTER.
Krok ven Kroky mimo aktuální funkci a o jednu úroveň výš, pokud je funkce vnořená. Pokud je v hlavním těle, skript se spustí na konec nebo na další zarážku. Přeskočené příkazy se spustí, ale neprojdou. Stiskněte shift+F11 nebo v nabídce Ladění, klikněte na Step Out nebo v podokně konzoly zadejte O a stiskněte ENTER.
Continue Pokračuje v provádění až na konec nebo na další zarážku. Přeskočené funkce a vyvolání se provádějí, ale neprostupují se. Stiskněte klávesu F5 nebo v nabídce Ladění klepněte na příkaz 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:

  • V podokně skriptů najeďte myší na proměnnou, aby se její hodnota zobrazila jako popis.

  • V podokně konzoly zadejte název proměnné a stiskněte ENTER.

Všechna podokna 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 však 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:

  1. Ve skriptu přiřaďte hodnotu automatické proměnné nové proměnné.

  2. 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 $MyInvocation proměnné, přiřaďte hodnotu nové proměnné, například $scriptName, a potom najeďte myší na proměnnou nebo zadejte $scriptName proměnnou, 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

Viz také

Seznámení s prostředím Windows PowerShell ISE