Linux Fu: Depuración de los scripts de bash

Un reciente post sobre la depuración de construcciones me sorprendió. Hubo bastantes comentarios sobre cómo no necesitabas un depurador, siempre y cuando tuvieras printf. En realidad, todos hemos depurado sistemas en los que no tenías nada más que un LED que parpadeara o se encendiera para comunicarse con el usuario. Sin embargo, es difícil negar que un depurador puede ayudar con código complejo.

Decir que sólo necesitas la impresión sería como decir que sólo necesitas el lenguaje de máquina. Técnicamente es preciso – puede hacer cualquier cosa en lenguaje de máquina. Pero seguro que facilita las cosas el tener un ensamblador o algún lenguaje que le ayude a resolver su problema. Si escribe un simple script bash, puede usar el equivalente a printf – tal vez ese sea el comando echo, aunque normalmente hay un comando de printf en un sistema típico, si quiere usarlo. Sin embargo, hay otras cosas que puede hacer con bash, incluyendo un depurador bastante bueno si sabe cómo encontrarlo.

Asumo que ya sabes cómo usar echo e printf, pero vamos a profundizar en cómo usar la ejecución de trazas línea por línea sin necesidad de usar declaraciones de echo en cada una de las otras líneas. A lo largo del camino, aprenderás cómo empezar con el depurador de bash.


Rastreo

No siempre es fácil de leer, pero puede obtener un rastro de la ejecución completa de un script en ejecución añadiendo la opción -x a su invocación de bash. Hay al menos tres formas de hacerlo. Primero, puede hacer un conjunto -x en su sesión actual. El problema con esto es que cualquier cosa elegante que ocurra en el intérprete de comandos del shell aparecerá también. Esto hace que la salida sea aún más difícil de leer. Si utiliza este método, puede desactivar el trazado en un intérprete de órdenes con el valor +x.

12345678#!/bin/bash -xpara I en {1..10}dobanner $((9-I)) – HADechoechodone

También puede añadir la bandera cuando ejecute el script desde la línea de comandos: bash -x ./had.sh o al shebang en la primera línea de su script. Normalmente, tendrá #!/bin/bash en la parte superior del archivo, sólo tiene que añadir la -x en esa línea.

Por ejemplo, el siguiente script tiene algunos errores. Puse la -x en la parte superior, así que si lo ejecutas, verás cómo se ve el rastro. Fíjate en las líneas que empiezan con un signo más. Es la línea del script que se está ejecutando. Las otras líneas son en realidad la salida del script.


Instalación del depurador de fallos

Hay un depurador de bash disponible. Sin embargo, Ubuntu y distribuciones similares no lo han incluido en sus repositorios de software por un tiempo. Puedes, por supuesto, ir a buscarlo tú mismo. Querrás saber qué versión de bash estás usando (prueba bash –versión). Descargue la versión que coincida con la que tiene y siga las instrucciones.

El depurador en sí está escrito en bash. Utiliza una trampa especial que se dispara al final de cada sentencia que está ahí especialmente para la depuración. En teoría, podría crear su propio depurador usando esa trampa, pero es bastante trabajo.


Utilización del depurador

Hay al menos dos maneras de invocar el depurador. Puede ejecutarlo junto con el nombre del script que es bastante seguro:bashdb had.sh.

El único problema con esto es que puede confundir a $0 y el propio script aparece en el árbol de llamadas. Ejecutar bash con la opción -debugging también ejecutará el programa, o al menos debería hacerlo. A mí me funciona, pero anecdóticamente, algunas personas tienen problemas con este método.

Si usted pide ayuda sobre el programa bashdb, hay muchas opciones, pero ninguna que usted utilice a menudo. Dentro del programa, tienes comandos similares a los comandos de gdb. Puedes revisarlos todos escribiendo «help» en el prompt.

Pedir ayuda en el programa bashdb mostrará cómo establecer los puntos de interrupción, mirar los backtraces o incluso hacer que se ejecuten los comandos cuando se cumplan ciertas condiciones. Algunos de estos comandos merecen una investigación más profunda:

  • list – Muestra el guión con números de línea
  • break – Establece un punto de interrupción en una línea (nota: tbreak establece un punto de interrupción de una sola vez)
  • backtrace – Ver la pila de llamadas
  • Condición – Establece un punto de ruptura condicional
  • display – Configurar para imprimir una variable antes de cada parada
  • manija – Configurar el manejo de la trampa
  • step, next, skip – Comandos de un solo paso
  • trace, untrace – Como el argumento -x
  • reloj, relojes – Ajustar relojes

El proceso de depuración es familiar. Tanto si se trata de un solo paso a través del código, como si se establecen puntos de interrupción para detener el flujo del programa, esto le permite rastrear los problemas con mucha más flexibilidad de lo que lo haría el eco de la información.

Hay dos cosas que están mal en mi guión. Bueno, al menos dos cosas. Primero, me refería a que la pancarta cuenta atrás: 10, 9, 8, etc. También quería todo en una línea. Una de ellas es fácil de encontrar con el depurador.

Si quieres un video de recorrido, el de abajo es bastante viejo, pero aún así es bueno.

La mejor manera de no tener que depurar los scripts de shell es no poner errores para empezar. Hay herramientas que le ayudarán a conseguirlo. Por otra parte, puede escribir sus scripts de shell en C.

Anillo del Amazonas: Vecinos filtran datos sobre sus vecinos

Anillo del Amazonas: Vecinos filtran datos sobre sus vecinos

Desde hace un tiempo han estado circulando una serie de historias sobre el timbre de la puerta de Amazon, una ...
Leer Más
¿Tienes correo?

¿Tienes correo?

La vida está llena de decisiones difíciles, como decidir si quieres ir al final del viaje para comprobar si ha ...
Leer Más
Los autos que se conducen solos predicen la personalidad de los conductores

Los autos que se conducen solos predicen la personalidad de los conductores

En un estudio reciente realizado por un equipo de investigadores del MIT, se están programando coches autoconductores para identificar las ...
Leer Más
Sleeper PlayStation esconde un Pi 4 de Raspberry

Sleeper PlayStation esconde un Pi 4 de Raspberry

[Andreas Wilcox] quería darle a su hermano un regalo de cumpleaños que reflejara el amor que compartían por los primeros ...
Leer Más
Un caso impreso para sus sensores ambientales ESP

Un caso impreso para sus sensores ambientales ESP

Ya lo hemos dicho antes pero vale la pena repetirlo: enrollar tu propia solución de hardware es ridículamente fácil en ...
Leer Más
Superconferencia Hackaday: Un ingeniero analógico se sumerge en la radiofrecuencia

Superconferencia Hackaday: Un ingeniero analógico se sumerge en la radiofrecuencia

Aquellos de nosotros que trabajamos con la electrónica normalmente llegamos al arte a través de una vía particular que dominamos ...
Leer Más
La lámpara del globo sigue la ISS por ti

La lámpara del globo sigue la ISS por ti

Suponiendo que no trabaje en una agencia espacial importante, es probable que no necesite saber en todo momento la ubicación ...
Leer Más
1984 WeatherMan Pi muestra los cambios de Ch-Ch-Ch-Ch-Ch

1984 WeatherMan Pi muestra los cambios de Ch-Ch-Ch-Ch-Ch

Cuando la MIL de [MisterM] le regaló un reproductor de casetes portátil de los 80, saltó de alegría. Una vez ...
Leer Más
Inyecte las pulsaciones de teclas como quiera con este inyector de pulsaciones de teclas Bluetooth

Inyecte las pulsaciones de teclas como quiera con este inyector de pulsaciones de teclas Bluetooth

[Amirreza Nasiri] envía este genial inyector de pulsaciones de teclas USB. El dispositivo consiste en un Arduino, un módulo Bluetooth ...
Leer Más
La edad de oro de la siempre cambiante arquitectura de los ordenadores

La edad de oro de la siempre cambiante arquitectura de los ordenadores

Dada la precisión de la Ley de Moore en el desarrollo de los circuitos integrados a lo largo de los ...
Leer Más
Chat de propulsión satelital de código abierto

Chat de propulsión satelital de código abierto

Acompáñenos el miércoles 11 de diciembre al mediodía en el Pacífico para la Charla de Propulsión Satelital de Código Abierto ...
Leer Más
Hacer trampa en los bolos, a la manera de los hackers

Hacer trampa en los bolos, a la manera de los hackers

Cualquier persona que haya ido alguna vez a una bolera sabrá la técnica preferida (pero ineficaz) para controlar telepáticamente una ...
Leer Más
La paleta de ping pong iluminada por el borde ilumina la lucha

La paleta de ping pong iluminada por el borde ilumina la lucha

y a sus compañeros les gusta soplar un poco de vapor de la hora del almuerzo en la mesa de ...
Leer Más
Simulación de circuitos en Python

Simulación de circuitos en Python

El uso de SPICE para simular un circuito eléctrico es una práctica bastante común en la ingeniería que "SPICEing a ...
Leer Más
Contempla una pantalla 3D, gracias a una bola de espuma de alta velocidad

Contempla una pantalla 3D, gracias a una bola de espuma de alta velocidad

Hemos visto cómo se ha intentado la proyección de imágenes en 3D de diferentes maneras, pero ésta es una nueva ...
Leer Más
La tarjeta de interfaz universal viene al rescate de proyectos más grandes

La tarjeta de interfaz universal viene al rescate de proyectos más grandes

Tan pronto como un proyecto involucra otros ensamblajes, partes o módulos, las cosas se complican. Dispositivos como ventiladores, unidades de ...
Leer Más
La universidad hace impresiones en 3D a prueba de balas

La universidad hace impresiones en 3D a prueba de balas

Los investigadores de la Universidad de Rice están estudiando las estructuras plásticas de impresión en 3D que imitan a los ...
Leer Más
Encadenamiento de una pantalla LED de burbujas de 16×2

Encadenamiento de una pantalla LED de burbujas de 16×2

Recientemente hemos notado un aumento en el interés por los llamados "displays de burbuja": LEDs alfanuméricos antiguos que probablemente se ...
Leer Más
La aplicación de teléfono de AI aprende las señales de béisbol

La aplicación de teléfono de AI aprende las señales de béisbol

Ver un deporte puede ser un poco extraño si no estás familiarizado con él. La mayoría de los estadounidenses, por ...
Leer Más
La Mujer Maravilla y el verdadero lazo de la verdad

La Mujer Maravilla y el verdadero lazo de la verdad

Puede que te parezca extraño que una historia sobre tecnología empiece hablando de la Mujer Maravilla. Cuando te das cuenta ...
Leer Más
La impresión en 3D de materiales múltiples hace al robot blando

La impresión en 3D de materiales múltiples hace al robot blando

Cuando haces un zoom sobre un fractal, descubres que está hecho de más fractales. Tal vez eso ayudó a inspirar ...
Leer Más
Empieza tu día con la montaña que se eleva

Empieza tu día con la montaña que se eleva

Como muchos de nosotros, [Zach Archer] disfruta tanto de la comodidad de su cuarto oscuro que le cuesta levantarse y ...
Leer Más
Construyendo un falso ordenador portátil retro

Construyendo un falso ordenador portátil retro

El portátil moderno tiene sus orígenes a mediados y finales de la década de 1980, cuando la reducción del hardware ...
Leer Más
Los tubos de acero y las placas de tierra forman el esqueleto de esta fresadora vertical CNC de bricolaje

Los tubos de acero y las placas de tierra forman el esqueleto de esta fresadora vertical CNC de bricolaje

Si lo vas a hacer tú mismo, es mejor que te superes a ti mismo. Esa parece ser la idea ...
Leer Más
Los botones de Arcade son un gran teclado multimedia

Los botones de Arcade son un gran teclado multimedia

[Giovanni Bernardo] tiene un trabajo muy importante - administrar el audio para varios eventos navideños. Deseando una interfaz de control ...
Leer Más
¡Jackpot!: Las pruebas y tribulaciones de convertir una tragaperras en un cajero automático

¡Jackpot!: Las pruebas y tribulaciones de convertir una tragaperras en un cajero automático

¿Alguna vez has deseado que las máquinas tragaperras dispensen dinero tan fácilmente como un cajero automático? Bueno, también lo deseaba ...
Leer Más
Convirtiendo un mal suministro de banco en un mejor suministro de banco

Convirtiendo un mal suministro de banco en un mejor suministro de banco

Es la temporada de dejar caer pistas sobre qué nuevos doodads harían feliz a un hacker, y tenemos que admitir ...
Leer Más
¿Progresivo o Thrash? Cómo los detectores de metales discriminan

¿Progresivo o Thrash? Cómo los detectores de metales discriminan

La detección de metales es un pasatiempo divertido, incluso cuando todo lo que puedes encontrar es un poco de paz ...
Leer Más
Retrotecnológico: 934 MHz CB Radio

Retrotecnológico: 934 MHz CB Radio

El espectro radioeléctrico está cuidadosamente regulado y dividido por los gobiernos de todo el mundo. Parte del mismo se comparte ...
Leer Más
Recocido de impresiones 3D: Un enfoque científico

Recocido de impresiones 3D: Un enfoque científico

A todos nos han enseñado el método científico: Formar una hipótesis, hacer algunos experimentos, reunir algunos datos, y probar o ...
Leer Más

Deja un comentario