Condividi tramite


Come eseguire il debug di script in Windows PowerShell ISE

Questo articolo descrive come eseguire il debug degli script in un computer locale usando le funzionalità di debug visivo di Windows PowerShell Integrated Scripting Environment (ISE).

Come gestire i punti di interruzione

Un punto di interruzione è un punto designato in uno script in cui si vuole sospendere l'operazione in modo da poter esaminare lo stato corrente delle variabili e l'ambiente in cui è in esecuzione lo script. Una volta che il tuo script è sospeso da un punto di interruzione, puoi eseguire comandi nel pannello Console per esaminare lo stato del tuo script. È possibile restituire variabili o eseguire altri comandi. È anche possibile modificare il valore di qualsiasi variabile visibile al contesto dello script attualmente in esecuzione. Dopo aver esaminato ciò che si vuole visualizzare, è possibile riprendere l'operazione dello script.

È possibile impostare tre tipi di punti di interruzione nell'ambiente di debug di Windows PowerShell:

  1. Punto di interruzione di riga. Lo script viene sospeso quando viene raggiunta la riga designata durante l'operazione dello script

  2. Punto di interruzione variabile. Lo script viene sospeso ogni volta che il valore della variabile designata cambia.

  3. Punto di interruzione del comando. Lo script viene sospeso ogni volta che il comando designato sta per essere eseguito durante l'operazione dello script. Può includere parametri per filtrare ulteriormente il punto di interruzione solo per l'operazione desiderata. Il comando può anche essere una funzione creata.

Di questi, nell'ambiente di debug di Windows PowerShell ISE, solo i punti di interruzione di riga possono essere impostati usando il menu o i tasti di scelta rapida. Gli altri due tipi di punti di interruzione possono essere impostati, ma vengono impostati dal riquadro della console usando il cmdlet Set-PSBreakpoint . Questa sezione descrive come eseguire attività di debug in Windows PowerShell ISE usando i menu disponibili ed eseguire una gamma più ampia di comandi dal riquadro della console usando lo scripting.

Per impostare un punto di interruzione

Un punto di interruzione può essere impostato in uno script solo dopo che è stato salvato. Fare clic con il pulsante destro del mouse sulla riga in cui si desidera impostare un punto di interruzione di riga e quindi scegliere Attiva/disattiva punto di interruzione. In alternativa, fare clic sulla riga in cui si desidera impostare un punto di interruzione di riga e premere F9 oppure scegliere Attiva/Disattiva punto di interruzione dal menu Debug.

Lo script seguente è un esempio di come impostare un punto di interruzione di variabile dal riquadro della console usando il cmdlet Set-PSBreakpoint .

# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server

Elencare tutti i punti di interruzione

Visualizza tutti i punti di interruzione nella sessione corrente di Windows PowerShell.

Scegliere Elenca punti di interruzione dal menu Debug. Lo script seguente è un esempio di come elencare tutti i punti di interruzione dal riquadro della console usando il cmdlet Get-PSBreakpoint .

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

Rimuovere un punto di interruzione

La rimozione di un punto di interruzione lo elimina.

Se pensi di volerlo riutilizzare in seguito, considera di Disabilitare un punto di interruzione invece. Fare clic con il pulsante destro del mouse sulla riga in cui si desidera rimuovere un punto di interruzione, quindi scegliere Attiva/disattiva Punto di interruzione. In alternativa, fare clic sulla riga in cui si desidera rimuovere un punto di interruzione e scegliere Attiva/Disattiva punto di interruzione dal menu Debug. Lo script seguente è un esempio di come rimuovere un punto di interruzione con un ID specificato dal riquadro della console usando il cmdlet Remove-PSBreakpoint .

# This command deletes the breakpoint with breakpoint ID 2.
Remove-PSBreakpoint -Id 2

Rimuovi tutti i punti di interruzione

Per rimuovere tutti i punti di interruzione definiti nella sessione corrente, scegliere Rimuovi tutti i punti di interruzione dal menu Debug.

Lo script seguente è un esempio di come rimuovere tutti i punti di interruzione dal riquadro della console usando il cmdlet Remove-PSBreakpoint .

# This command deletes all of the breakpoints in the current session.
Get-PSBreakpoint | Remove-PSBreakpoint

Disabilitare un punto di interruzione

La disabilitazione di un punto di interruzione non la rimuove. Lo disattiva fino a quando non è abilitato. Per disabilitare un punto di interruzione di riga specifico, fare clic con il pulsante destro del mouse sulla riga in cui si desidera disabilitare un punto di interruzione e quindi scegliere Disabilita punto di interruzione.

In alternativa, fare clic sulla riga in cui si desidera disabilitare un punto di interruzione e premere F9 oppure scegliere Disabilita punto di interruzione dal menu Debug. Lo script seguente è un esempio di come rimuovere un punto di interruzione con un ID specificato dal riquadro della console usando il cmdlet Disable-PSBreakpoint .

# This command disables the breakpoint with breakpoint ID 0.
Disable-PSBreakpoint -Id 0

Disabilita tutti i punti di interruzione

La disabilitazione di un punto di interruzione non lo rimuove; viene disattivato fino a quando non è abilitato. Per disabilitare tutti i punti di interruzione nella sessione corrente, scegliere Disabilita tutti i punti di interruzione dal menu Debug. Lo script seguente è un esempio di come disabilitare tutti i punti di interruzione dal riquadro della console usando il cmdlet Disable-PSBreakpoint .

# This command disables all breakpoints in the current session.
# You can abbreviate this command as: "gbp | dbp".
Get-PSBreakpoint | Disable-PSBreakpoint

Abilitare un punto di interruzione

Per abilitare un punto di interruzione specifico, fare clic con il pulsante destro del mouse sulla riga in cui si desidera abilitare un punto di interruzione e quindi scegliere Abilita punto di interruzione. In alternativa, fare clic sulla riga in cui si desidera abilitare un punto di interruzione, quindi premere F9 o scegliere Abilita punto di interruzione dal menu Debug. Lo script seguente è un esempio di come abilitare punti di interruzione specifici dal riquadro della console usando il cmdlet Enable-PSBreakpoint .

# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
Enable-PSBreakpoint -Id 0, 1, 5

Abilitare tutti i punti di interruzione

Per abilitare tutti i punti di interruzione definiti nella sessione corrente, scegliere Abilita tutti i punti di interruzione dal menu Debug. Lo script seguente è un esempio di come abilitare tutti i punti di interruzione dal riquadro della console usando il cmdlet 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

Come gestire una sessione di debug

Prima di avviare il debug, è necessario impostare uno o più punti di interruzione. Non è possibile impostare un punto di interruzione a meno che non venga salvato lo script di cui si vuole eseguire il debug. Per istruzioni su come impostare un punto di interruzione, vedere Come gestire i punti di interruzione o Set-PSBreakpoint. Dopo aver avviato il debug, non è possibile modificare uno script finché non si arresta il debug. Uno script con uno o più punti di interruzione impostati viene salvato automaticamente prima dell'esecuzione.

Per avviare il debug

Premere F5 o, sulla barra degli strumenti, fare clic sull'icona Esegui script oppure scegliere Esegui/Continua dal menu Debug. Lo script viene eseguito fino a quando non rileva il primo punto di interruzione. Sospende l'operazione e evidenzia la riga su cui è stata sospesa.

Per continuare il debug

Premere F5 o, sulla barra degli strumenti, fare clic sull'icona Esegui script oppure scegliere Esegui/Continua dal menu Debug oppure digitare nel riquadro C della console e quindi premere INVIO. In questo modo, lo script continua l'esecuzione al punto di interruzione successivo o alla fine dello script se non vengono rilevati altri punti di interruzione.

Per visualizzare lo stack di chiamate

Lo stack di chiamate visualizza la posizione di esecuzione attuale nello script. Se lo script è in esecuzione in una funzione chiamata da una funzione diversa, questa viene rappresentata nella visualizzazione da righe aggiuntive nell'output. Nella riga più in basso viene visualizzato lo script originale e la riga in cui è stata chiamata una funzione. La riga seguente mostra la funzione e la riga in cui un'altra funzione potrebbe essere stata chiamata. La riga più in alto mostra il contesto corrente della riga corrente in cui è impostato il punto di interruzione.

Durante la pausa, per visualizzare lo stack di chiamate corrente, premere CTRL+MAIUSC+D o scegliere Visualizza stack di chiamate dal menu Debug oppure, nel riquadro della console, digitare K e quindi premere INVIO.

Per arrestare il debug

Premere MAIUSC+F5 o scegliere Arresta debugger dal menu Debug oppure digitare nel riquadro Q della console e quindi premere INVIO.

Come saltare, entrare ed uscire durante il debug

Lo 'stepping' è il processo di eseguire una singola istruzione alla volta. È possibile arrestarsi su una riga di codice ed esaminare i valori delle variabili e lo stato del sistema. Nella tabella seguente vengono descritte le comuni attività di debug, come il passaggio sopra, il passaggio dentro e l'uscita da.

Attività di debug Descrizione Come eseguire questa operazione in PowerShell ISE
Entra in Esegue l'istruzione corrente e si ferma all'istruzione successiva. Se l'istruzione corrente è una chiamata di funzione o script, il debugger esegue la procedura in tale funzione o script; in caso contrario, si arresta all'istruzione successiva. Premere F11 o, nel menu Debug, fare clic su Passa In, o nel riquadro della Console, digitare S e premere INVIO.
Passa sopra Esegue l'istruzione corrente e quindi si arresta all'istruzione successiva. Se l'istruzione corrente è una chiamata di funzione o script, il debugger esegue l'intera funzione o script e si arresta all'istruzione successiva dopo la chiamata di funzione. Premere F10 o scegliere Esegui istruzione/routine dal menu Debug oppure digitare e premere INVIO nel riquadro V della console.
Fai un passo fuori Esce dalla funzione corrente e sale di un livello se la funzione è annidata. Se nel corpo principale, lo script viene eseguito alla fine o al punto di interruzione successivo. Le istruzioni ignorate vengono eseguite, ma non vengono analizzate passo dopo passo. Premere MAIUSC+F11 oppure scegliere Esci da istruzione/routine dal menu Debug oppure digitare e premere INVIO nel riquadro O della console.
Continua Continua l'esecuzione fino alla fine o al punto di interruzione successivo. Le funzioni e le chiamate ignorate vengono eseguite, ma non vengono eseguite. Premere F5 o scegliere Esegui/Continua dal menu Debug oppure nel riquadro della console digitare C e premere INVIO.

Come visualizzare i valori delle variabili durante il debug

È possibile visualizzare i valori correnti delle variabili nello script durante l'esecuzione del codice.

Per visualizzare i valori delle variabili standard

Usare uno dei metodi seguenti:

  • Nel riquadro dello script, passa il mouse sulla variabile per visualizzarne il valore come descrizione comando.

  • Nel riquadro della console digitare il nome della variabile e premere INVIO.

Tutti i pannelli in ISE si trovano sempre nello stesso ambito. Pertanto, durante il debug di uno script, i comandi digitati nel riquadro della console vengono eseguiti nell'ambito dello script. In questo modo è possibile usare il riquadro della console per trovare i valori delle variabili e chiamare le funzioni definite solo nello script.

Per visualizzare i valori delle variabili automatiche

È possibile usare il metodo precedente per visualizzare il valore di quasi tutte le variabili durante il debug di uno script. Tuttavia, questi metodi non funzionano per le variabili automatiche seguenti.

  • $_
  • $input
  • $MyInvocation
  • $PSBoundParameters
  • $args

Se si tenta di visualizzare il valore di una di queste variabili, si ottiene il valore di tale variabile per in una pipeline interna usata dal debugger, non il valore della variabile nello script. È possibile risolvere questo problema per alcune variabili ($_, $input, $MyInvocation$PSBoundParameters, e $args) usando il metodo seguente:

  1. Nello script assegnare il valore della variabile automatica a una nuova variabile.

  2. Visualizzare il valore della nuova variabile, passando il puntatore del mouse sulla nuova variabile nel riquadro di script o digitando la nuova variabile nel riquadro della console.

Ad esempio, per visualizzare il valore della $MyInvocation variabile, nello script assegnare il valore a una nuova variabile, ad esempio $scriptName, e quindi passare il puntatore del mouse o digitare la variabile per visualizzarne il $scriptName valore.

# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.PSCommandPath
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1

Vedere anche

Esplorare Windows PowerShell ISE