Búsqueda de sitios web

Cómo depurar scripts en Windows PowerShell ISE


Este artículo describe cómo depurar scripts en una computadora local mediante las funciones de depuración visual del Entorno de scripting integrado (ISE) de Windows PowerShell.

Cómo gestionar los puntos de interrupción

Un punto de interrupción es un lugar designado en un script donde desea que la operación se detenga para poder examinar el estado actual de las variables y el entorno en el que se ejecuta el script. Una vez que su secuencia de comandos esté pausada por un punto de interrupción, puede ejecutar comandos en el Panel de la consola para examinar el estado de su secuencia de comandos. Puede generar variables o ejecutar otros comandos. Incluso puede modificar el valor de cualquier variable que sea visible en el contexto del script que se está ejecutando actualmente. Una vez que haya examinado lo que desea ver, puede reanudar la operación del script.

Puede establecer tres tipos de puntos de interrupción en el entorno de depuración de Windows PowerShell:

  1. Punto de interrupción de línea. El script se detiene cuando se alcanza la línea designada durante la operación del script.

  2. Punto de interrupción de la variable. El script se detiene cada vez que cambia el valor de la variable designada.

  3. Punto de interrupción del comando. El script se detiene cada vez que el comando designado está a punto de ejecutarse durante la operación del script. Puede incluir parámetros para filtrar aún más el punto de interrupción solo para la operación que desee. El comando también puede ser una función que usted creó.

De estos, en el entorno de depuración ISE de Windows PowerShell, solo se pueden establecer puntos de interrupción de línea mediante el menú o los métodos abreviados de teclado. Los otros dos tipos de puntos de interrupción se pueden configurar, pero se configuran desde el panel de la consola mediante el cmdlet Set-PSBreakpoint. Esta sección describe cómo puede realizar tareas de depuración en Windows PowerShell ISE mediante el uso de los menús cuando estén disponibles y cómo ejecutar una gama más amplia de comandos desde el panel de la consola mediante secuencias de comandos.

Para establecer un punto de interrupción

Se puede establecer un punto de interrupción en un script solo después de haberlo guardado. Haga clic derecho en la línea donde desea establecer un punto de interrupción y luego haga clic en Alternar punto de interrupción. O haga clic en la línea donde desea establecer un punto de interrupción y presione F9 o, en el menú Depurar, haga clic en Alternar punto de interrupción.

El siguiente script es un ejemplo de cómo puede establecer un punto de interrupción variable desde el panel de la consola mediante el cmdlet Set-PSBreakpoint.

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

Listar todos los puntos de interrupción

Muestra todos los puntos de interrupción en la sesión actual de Windows PowerShell.

En el menú Depurar, haga clic en Listar puntos de interrupción. El siguiente script es un ejemplo de cómo puede enumerar todos los puntos de interrupción desde el panel de la consola mediante el cmdlet Get-PSBreakpoint.

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

Eliminar un punto de interrupción

Al eliminar un punto de interrupción, se elimina.

Si cree que querrá volver a utilizarlo más adelante, considere Desactivar un punto de interrupción. Haga clic derecho en la línea donde desea eliminar un punto de interrupción y luego haga clic en Alternar punto de interrupción. O haga clic en la línea donde desea eliminar un punto de interrupción y, en el menú Depurar, haga clic en Alternar punto de interrupción. El siguiente script es un ejemplo de cómo eliminar un punto de interrupción con un ID especificado del panel de la consola mediante el cmdlet Remove-PSBreakpoint.

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

Eliminar todos los puntos de interrupción

Para eliminar todos los puntos de interrupción definidos en la sesión actual, en el menú Depurar, haga clic en Eliminar todos los puntos de interrupción.

El siguiente script es un ejemplo de cómo eliminar todos los puntos de interrupción del panel de la consola mediante el cmdlet Remove-PSBreakpoint.

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

Deshabilitar un punto de interrupción

Deshabilitar un punto de interrupción no lo elimina. Lo apaga hasta que se habilita. Para deshabilitar un punto de interrupción de línea específico, haga clic derecho en la línea donde desea deshabilitar un punto de interrupción y luego haga clic en Desactivar punto de interrupción.

O haga clic en la línea donde desea deshabilitar un punto de interrupción y presione F9 o, en el menú Depurar, haga clic en Desactivar punto de interrupción. El siguiente script es un ejemplo de cómo puede eliminar un punto de interrupción con un ID específico del panel de la consola mediante el cmdlet Disable-PSBreakpoint.

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

Deshabilitar todos los puntos de interrupción

Deshabilitar un punto de interrupción no lo elimina; lo apaga hasta que se habilita. Para deshabilitar todos los puntos de interrupción en la sesión actual, en el menú Depurar, haga clic en Desactivar todos los puntos de interrupción. El siguiente script es un ejemplo de cómo puede deshabilitar todos los puntos de interrupción desde el panel de la consola mediante el cmdlet Disable-PSBreakpoint.

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

Habilitar un punto de interrupción

Para habilitar un punto de interrupción específico, haga clic derecho en la línea donde desea habilitar un punto de interrupción y luego haga clic en Activar punto de interrupción. O haga clic en la línea donde desea habilitar un punto de interrupción y luego presione F9 o, en el menú Depurar, haga clic en Habilitar punto de interrupción. El siguiente script es un ejemplo de cómo habilitar puntos de interrupción específicos desde el panel de la consola mediante el cmdlet Enable-PSBreakpoint.

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

Habilitar todos los puntos de interrupción

Para habilitar todos los puntos de interrupción definidos en la sesión actual, en el menú Depurar, haga clic en Habilitar todos los puntos de interrupción. El siguiente script es un ejemplo de cómo habilitar todos los puntos de interrupción desde el panel de la consola mediante el 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

Cómo gestionar una sesión de depuración

Antes de comenzar a depurar, debe establecer uno o más puntos de interrupción. No puede establecer un punto de interrupción a menos que se guarde el script que desea depurar. Para obtener instrucciones sobre cómo establecer un punto de interrupción, consulte Cómo administrar puntos de interrupción o Set-PSBreakpoint. Después de comenzar a depurar, no podrá editar un script hasta que deje de depurar. Un script que tiene uno o más puntos de interrupción establecidos se guarda automáticamente antes de ejecutarse.

Para comenzar a depurar

Presione F5 o, en la barra de herramientas, haga clic en el icono Ejecutar script o, en el menú Depurar, haga clic en Ejecutar/Continuar . . El script se ejecuta hasta que encuentra el primer punto de interrupción. Pausa la operación allí y resalta la línea en la que se detuvo.

Para continuar con la depuración

Presione F5 o, en la barra de herramientas, haga clic en el icono Ejecutar script o en el menú Depurar, haga clic en Ejecutar/Continuar. o, en el Panel de la consola, escriba C y luego presione ENTER. Esto hace que el script continúe ejecutándose hasta el siguiente punto de interrupción o hasta el final del script si no se encuentran más puntos de interrupción.

Para ver la pila de llamadas

La pila de llamadas muestra la ubicación de ejecución actual en el script. Si el script se ejecuta en una función que fue llamada por una función diferente, eso se representa en la pantalla mediante filas adicionales en la salida. La fila inferior muestra el script original y la línea en la que se llamó a una función. La siguiente línea muestra esa función y la línea en la que se podría haber llamado a otra función. La fila superior muestra el contexto actual de la línea actual en la que se establece el punto de interrupción.

Mientras está en pausa, para ver la pila de llamadas actual, presione CTRL+SHIFT+D o, en el menú Depurar. , haga clic en Mostrar pila de llamadas o, en el panel de la consola, escriba K y luego presione ENTER.

Para detener la depuración

Presione SHIFT+F5 o, en el menú Depurar, haga clic en Detener depurador o, en el panel de la consola, escriba Q y luego presione ENTER.

Cómo pasar, entrar y salir durante la depuración

El paso a paso es el proceso de ejecutar una declaración a la vez. Puede detenerse en una línea de código y examinar los valores de las variables y el estado del sistema. La siguiente tabla describe tareas de depuración comunes, como pasar por encima, entrar y salir.

Debugging Task Description How to accomplish it in PowerShell ISE
Step Into Executes the current statement and then stops at the next statement. If the current statement is a function or script call, then the debugger steps into that function or script, otherwise it stops at the next statement. Press F11 or, on the Debug menu, click Step Into, or in the Console Pane, type S and press ENTER.
Step Over Executes the current statement and then stops at the next statement. If the current statement is a function or script call, then the debugger executes the whole function or script, and it stops at the next statement after the function call. Press F10 or, on the Debug menu, click Step Over, or in the Console Pane, type V and press ENTER.
Step Out Steps out of the current function and up one level if the function is nested. If in the main body, the script is executed to the end, or to the next breakpoint. The skipped statements are executed, but not stepped through. Press SHIFT+F11, or on the Debug menu, click Step Out, or in the Console Pane, type O and press ENTER.
Continue Continues execution to the end, or to the next breakpoint. The skipped functions and invocations are executed, but not stepped through. Press F5 or, on the Debug menu, click Run/Continue, or in the Console Pane, type C and press ENTER.

Cómo mostrar los valores de las variables durante la depuración

Puede mostrar los valores actuales de las variables en el script a medida que avanza en el código.

Para mostrar los valores de las variables estándar

Utilice uno de los siguientes métodos:

  • En el Panel de secuencias de comandos, coloque el cursor sobre la variable para mostrar su valor como información sobre herramientas.

  • En el Panel de la consola, escriba el nombre de la variable y presione ENTER.

Todos los paneles de ISE están siempre en el mismo ámbito. Por lo tanto, mientras depura un script, los comandos que escribe en el Panel de la consola se ejecutan en el ámbito del script. Esto le permite usar el panel de la consola para buscar los valores de las variables y llamar a funciones que están definidas solo en el script.

Para mostrar los valores de las variables automáticas

Puede utilizar el método anterior para mostrar el valor de casi todas las variables mientras depura un script. Sin embargo, estos métodos no funcionan para las siguientes variables automáticas.

  • $_

  • $Entrada

  • $MiInvocación

  • $PSBoundParameters

  • $Args

Si intenta mostrar el valor de cualquiera de estas variables, obtendrá el valor de esa variable en una canalización interna que utiliza el depurador, no el valor de la variable en el script. Puede solucionar esto para algunas variables ($_, $Input, $MyInvocation, $PSBoundParameters, y $Args) utilizando el siguiente método:

  1. En el script, asigne el valor de la variable automática a una nueva variable.

  2. Muestre el valor de la nueva variable, ya sea colocando el cursor sobre la nueva variable en el Panel de secuencias de comandos o escribiendo la nueva variable en el Panel de consola.

Por ejemplo, para mostrar el valor de la variable $MyInvocation, en el script, asigne el valor a una nueva variable, como $scriptName, y luego coloque el cursor sobre o escriba la variable $scriptName para mostrar su valor.

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

Ver también

Explorando el ISE de Windows PowerShell

Artículos relacionados