La depuración es el proceso de examinar un script mientras se ejecuta para identificar y corregir errores en las instrucciones del script.
Como ya debes saber la depuración o debugging, es el proceso para encontrar y corregir los errores, en el código fuente de cualquier software, tanto un simple script, como un programa, propiamente dicho.
La depuración de scripts es una habilidad esencial para los administradores de sistemas que necesitan automatizar tareas, solucionar problemas y optimizar el rendimiento.
Los scripts son programas que ejecutan comandos o instrucciones en un orden específico, generalmente escritos en lenguajes como Bash, PowerShell, Python o Perl.
Sin embargo, los scripts también pueden tener errores, errores o comportamientos inesperados que pueden causar problemas o fallas.
Cuando recién comenzaba a hacer alguna automatización desde linea de comandos o algún desarrollo, recuerdo que pasaba muchas horas tratando de encontrar el error en mi código y, al final, podría ser algo muy simple, como una coma.
Saber cómo usar la técnica de depuración adecuada te ayudara a resolver los errores rápidamente.
Qué se analiza durante la depuración
Es posible depurar los scripts para investigar los errores de tiempo de ejecución y realizar el seguimiento del flujo de ejecución.
En cada paso cambiamos los datos contenidos en alguna variable del programa, o algo en el "mundo real". tienen los valores esperados.
Para encontrar la causa de un problema, el código puede ejecutarse paso a paso, detenerse en puntos concretos y examinar el valor de las variables.
Mientras se encuentra en el depurador, también puede escribir comandos, mostrar el valor de las variables, usar cmdlets y ejecutar scripts en la línea de comandos.
Agregue instrucciones de diagnóstico a un script, como instrucciones que muestran el valor de variables, instrucciones que leen la entrada de la línea de comandos o instrucciones que informan de la instrucción actual.
Al añadir sentencias print hay que tener cuidado de añadir delimitadores alrededor de las variables.
extra al final de la variable $file_name.
mostrar como mostrar el contenido de estructuras de datos complejas.
Tipos de errores que ayuda a encontrar
Errores de tiempo de ejecución
Los errores de tiempo de ejecución aparecen cuando el script ya está ejecutándose y una instrucción no puede completarse correctamente.
Para investigar estos problemas, el depurador permite detener la ejecución, revisar el contexto actual y comprobar el contenido de las variables.
Errores lógicos
Un script puede finalizar sin mostrar errores y, aun así, producir un resultado incorrecto.
Este es el modo que uso cuando depuro scripts bash para errores lógicos.
El modo Xtrace mostrará el código línea por línea pero con los parámetros expandidos.
Esto me dice que hay cadenas vacías asignadas a las declaraciones condicionales -f y -d.
Errores de sintaxis
Los errores de sintaxis son muy comunes en los programas.
Es posible que haya perdido una cita o no haya podido salir del ciclo, etc.
Si, se te olvido de poner una llave, una corchete, unas comillas o una coma, gracias a esta flag, podrás saberlo.
mostrando mensajes de error de sintaxis.
De forma predeterminada, cuando ejecutas un script, bash validará la sintaxis y arrojará estos errores incluso sin usar el modo noexec.
Depuración paso a paso
La ejecución paso a paso permite observar qué instrucción se está procesando y cómo cambia el estado del programa.
Durante la depuración, haga clic en Entrar y Saltar según resulte adecuado.
Para suspender y continuar la ejecución del script, haga clic en Suspender script y Continuar script.
Cuando el script continúa, se ejecuta hasta encontrar el siguiente punto de interrupción o hasta el final.
Para establecer puntos de interrupción, haga doble clic en el espacio del extremo de la izquierda del número de línea.
Depuración de scripts en PowerShell
Windows PowerShell ISE solo admite Windows PowerShell.
Para PowerShell 6 y versiones posteriores, debe usar Visual Studio Code con la extensión para PowerShell.
Cuando use el depurador en la consola de PowerShell, use los siguientes comandos para controlar la ejecución.
| Comando | Función |
|---|---|
| s, Step | Ejecuta la siguiente instrucción y permite avanzar dentro de la ejecución. |
| v, StepOver | Ejecuta la siguiente instrucción, pero omite las funciones y las invocaciones. |
| o, StepOut | Pasos fuera de la función actual; subir un nivel si está anidado. |
| c, Continue | Continúa ejecutándose hasta que se complete el script o hasta que se alcance el siguiente punto de interrupción. |
| l, List | Muestra la parte del script que se está ejecutando. |
| q, Stop, Exit | Detiene la ejecución del script y sale del depurador. |
| <Enter> | Repite el último comando si se Step (s), StepOver (v) o List (l). |
| Ctrl+Break | Divide en un script en ejecución dentro de la consola de PowerShell o windows PowerShell ISE. |
De forma predeterminada, muestra la línea actual, cinco líneas anteriores y 10 líneas posteriores.
Si está en el cuerpo principal, continúa hasta el final o el siguiente punto de interrupción.
Dado que estamos en la última instrucción del script, los comandos Step, StepOut y Continue tienen el mismo efecto.
El comando StepOut ejecuta el último comando.
Tenga en cuenta que Ctrl+interrumpir en Windows PowerShell 2.0, 3.0 y 4.0 cierra el programa.
Puntos de interrupción
Un punto de interrupción detiene temporalmente el script en una ubicación determinada para permitir la inspección de su estado.
Al establecer un punto de interrupción variable o un punto de interrupción de comando, puede establecer el punto de interrupción solo en un archivo de script.
Para mostrar el valor de estas variables para el script que se está depurando, agregue líneas al script para guardar estos valores en una nueva variable.
Establezca el punto de interrupción después de estas nuevas líneas.
Cuando llegue a un punto de interrupción, escriba el entorno del depurador.
El símbolo del sistema cambia para que comience por "[DBG]:".
Además, en algunas aplicaciones host, como la consola de PowerShell, se abre una solicitud anidada para la depuración.
Puede encontrar el nivel de anidamiento mediante la $NestedPromptLevel variable automática.
La variable automática, $PSDebugContext, se define en el ámbito local.
Ejemplo de depuración en PowerShell
Los puntos de interrupción se han establecido en las líneas 6, 11, 22 y 25 del script.
Este script de prueba detecta la versión de PowerShell y muestra un mensaje adecuado para la versión.
Cuando el script alcanza el primer punto de interrupción, el mensaje de punto de interrupción indica que el depurador está activo.
Describe el punto de interrupción y muestra una vista previa de la primera línea del script, que es una declaración de función.
Use el comando Step (s) para ejecutar la primera instrucción en el script y para obtener una vista previa de la siguiente instrucción.
En este punto, la variable $scriptName no se rellena, pero puede comprobar el valor de la variable mostrando su valor.
Use otro comando Step (s) para ejecutar la instrucción actual y para obtener una vista previa de la siguiente instrucción en el script.
En este punto, la $scriptName variable se rellena, pero se comprueba el valor de la variable.
Use otro comando Step para ejecutar la llamada de función.
El mensaje de depuración incluye una vista previa de la instrucción en la función .
Para ejecutar esta instrucción y obtener una vista previa de la siguiente instrucción de la función, puede usar un comando Step.
Pero, en este caso, use un comando StepOut (o).
Ahora, vuelva a ejecutar el depurador.
En primer lugar, para eliminar el punto de interrupción actual, use los cmdlets Get-PSBreakpoint y Remove-PSBreakpoint.
Ahora, inicie el script.
El script alcanza el punto de interrupción de la variable.
Use un comando Step (s) para ejecutar la instrucción que rellena la variable.
La siguiente instrucción es una llamada a la función psversion.
Para omitir la función pero seguir ejecutándola, use un comando StepOver (v).
Si ya está en la función cuando usa StepOver, no es eficaz.
Use un comando Stop (t) para salir del depurador.
El script alcanza el punto de interrupción en la llamada de función.
En este momento, aún no se ha llamado a la función .
Para establecer una acción, use un comando Continue (c) para salir del script y un comando Remove-PSBreakpoint para eliminar el punto de interrupción actual.
Acciones y condiciones en los puntos de interrupción
Ahora, cree un nuevo punto de interrupción de comando con una acción.
El comando siguiente establece un punto de interrupción de comando con una acción que registra el valor de la variable $scriptName cuando se llama a la función.
Dado que la palabra clave break no se usa en la acción, la ejecución no se detiene.
También puede agregar acciones que establezcan condiciones para el punto de interrupción.
La palabra clave break de la acción dirige al depurador para ejecutar el punto de interrupción.
También puede usar la palabra clave continue para dirigir al depurador para que se ejecute sin interrumpir.
Inspección de la pila de llamadas
En este momento, es posible que quiera comprobar la pila de llamadas.
Use el cmdlet Get-PSCallStack o el comando del depurador de Get-PSCallStack (k).
La pila de llamadas permite revisar la secuencia de funciones y comandos que condujo hasta la instrucción actual.
Depuración remota en PowerShell
Puede ejecutar Enter-PSSession para iniciar una sesión interactiva de PowerShell remota en la que puede establecer puntos de interrupción y depurar archivos de script y comandos en el equipo remoto.
Enter-PSSession permite volver a conectar una sesión desconectada que ejecuta un script o comando en un equipo remoto.
Si el script en ejecución alcanza un punto de interrupción, la sesión de cliente inicia automáticamente el depurador.
Depuración de scripts Bash
A diferencia de otros lenguajes como Python, Java, etc., no existe una herramienta de depuración para bash donde pueda establecer puntos de interrupción, pasar por alto el código, etc.
La gran diferencia con otros lenguajes de programación, es que no tiene herramientas de depuración aparte de algunas opciones integradas.
A veces, estas opciones serán más que suficientes para realizar el trabajo y te pueden salvar de algún apuro.
El comando set es un comando integrado de shell que se puede usar para controlar los parámetros de bash y alterar su comportamiento de ciertas maneras.
Será ampliamente utilizado dentro de los scripts de shell, ya sea para la depuración o para habilitar el modo bash estricto.
Normalmente, no ejecutarás comandos de configuración desde la terminal para modificar el comportamiento de su shell.
Antes de conocer las opciones de depuración, te debo comentar que puedes depurar, tanto el script completo o solo una parte determinada del código.
Modo de rastreo xtrace
set -[flags] habilitará el modo de depuración.
set -x habilitará el modo xtrace para el script y set +x deshabilitará el modo xtrace.
El modo Xtrace mostrará el código línea por línea pero con los parámetros expandidos.
Para depurar este problema, puedo ejecutar el script en modo xtrace pasando el indicador -x.
bash -x scriptname.
El signo + que ve en stdout se puede cambiar poniendo la variable PS4 en el script.
De forma predeterminada, PS4 está configurado en (+), lanzando un: echo $PS4, podrás verificarlo.
Para cambiarlo.
Registro de la información de depuración
No olvides, que puedes redirigir los registros de depuración a un archivo en lugar de imprimirlos en la terminal.
Por ejemplo al código anterior agregue unas lineas, luego del shebang.
Cuando ejecuto este código en lugar de imprimir la salida de xtrace en la terminal, se redirigirá al archivo salida_debug.log.
Comprobación de variables no definidas
Cuando se trabaja con variables en bash, la desventaja es que si tratamos de usar una variable no definida, el script no fallará con algún mensaje de error como «Variable no definida».
En el código a continuación, obtengo información del usuario y la almaceno en la variable $OBJECT.
Cuando ejecuto este código, debería haberme arrojado un error, pero no lo hizo e incluso el script salió con el código de retorno cero.
Para anular este comportamiento, usa el flag -u, bash -u scriptname.
$OBJECT es directorio o archivo, segun sea el caso.
Modo detallado
En el modo detallado (verbose), el código se imprimirá antes de devolver el resultado.
Ejecutado el código anterior, primero imprimirá el código y luego esperará la entrada del usuario, hecho esto el resto del código se imprimirá seguido de la salida.
Como en los anteriores casos, puedes configurar el modo verbose usando set o en el shebang.
set -v, set -o verbose o #!
Modo noexec
De misma manera, como antes, puedes usar set -n, set -o noexec o #!
La opción noexec permite comprobar la sintaxis sin ejecutar las instrucciones del script.
Depuración en Perl
Perl viene con un potente debugger en línea de comandos.
Padre vienen con un debugger gráfico.
Las herramientas de depuración pueden variar según el lenguaje y el entorno de desarrollo, pero suelen permitir observar variables, controlar la ejecución y detener el programa en puntos específicos.
Cree su primer script de PowerShell
Procedimiento práctico para depurar un script
- Identifique el comportamiento inesperado o el mensaje de error.
- Determine si el problema corresponde a la sintaxis, al tiempo de ejecución o a la lógica del script.
- Ejecute el script completo o solo una parte determinada del código.
- Establezca puntos de interrupción antes de las instrucciones relevantes.
- Avance paso a paso con el comando apropiado.
- Compruebe el valor de las variables y la información de entrada.
- Revise la pila de llamadas cuando intervengan varias funciones.
- Agregue instrucciones de diagnóstico si necesita observar más datos.
- Registre la información de depuración en un archivo cuando la salida sea extensa.
- Continúe la ejecución hasta el siguiente punto de interrupción o hasta el final.
- Corrija la instrucción responsable y vuelva a ejecutar el script.
Para eliminar todos los posibles errores que hemos visto, puedes agregar algunas opciones en cada script.
Imagina un escenario en el que se activa el script, pero deseas cancelar lo con un CTRL+C.
En ese caso, se enviará SIGINT a tu script.
La depuración permite convertir una ejecución aparentemente opaca en una secuencia observable de instrucciones, valores y decisiones.

tags: #depuracion #de #scripts #que #es
Publicaciones populares:
- Tipos de mallas filtrantes para aire: materiales y eficiencia
- Seat Cordoba: manguitos del filtro de aire y toma de vacío del carburador
- Cómo crear un diagrama de potabilidad vacío paso a paso
- Protección reutilizable con mascarilla lavable negra y filtro
- Guata para filtros: limpieza y mantenimiento
