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.

Tutorial de FreeCAD TechDraw Workbench

Tutorial de FreeCAD TechDraw Workbench

FreeCAD comenzó un poco inestable, pero ha ido mejorando cada vez más. Si está intentando dibujar un esquema, probablemente no ...
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
Un Arduino y un Enigma todo enrollado en uno

Un Arduino y un Enigma todo enrollado en uno

Este hacker ha querido diseñar un simulador de máquina Enigma durante un tiempo, pero no dio el salto hasta que ...
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
¿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
El tren vertical sube por la pared

El tren vertical sube por la pared

Los trenes son excelentes para transportar cantidades masivas de carga desde el punto A al punto B, y ocasionalmente, al ...
Leer Más
Hackaday Podcast 046: Tráenos tus tonterías, hackeando clones de NES, agarrando FPGAs, muchos un Hack de música, y peceras llenas de azar

Hackaday Podcast 046: Tráenos tus tonterías, hackeando clones de NES, agarrando FPGAs, muchos un Hack de música, y peceras llenas de azar

Diferencia de dos imágenes de la luna de Vikram, contraste ajustado. Los editores de Digital Lithium, Elliot Williams y Mike ...
Leer Más
El Interruptor de Nintendo funciona también como interruptor de red

El Interruptor de Nintendo funciona también como interruptor de red

Viniendo directamente a ti desde el "Departamento de Redundancias" viene este ingenioso hack que convierte un Switch en un switch ...
Leer Más
¿Es ese multímetro barato tan bueno como un chiripa? Averigüémoslo

¿Es ese multímetro barato tan bueno como un chiripa? Averigüémoslo

Cuando habla de los medidores baratos, siempre dice: "Si te ganas la vida con esto, consíguete un Fluke". Pero se ...
Leer Más
La máquina de Lego utiliza la máquina de aprendizaje para clasificarse a sí misma

La máquina de Lego utiliza la máquina de aprendizaje para clasificarse a sí misma

En nuestra opinión, la principal evidencia de una infancia bien vivida es una enorme caja de cada pieza de Lego ...
Leer Más
Creación de Easy Glass Circuit Boards en casa

Creación de Easy Glass Circuit Boards en casa

Este consejo para crear placas de circuito de sustrato de vidrio en casa podría estar un poco más cerca de ...
Leer Más
El reloj de la fecha no requiere (casi) ninguna interacción

El reloj de la fecha no requiere (casi) ninguna interacción

Muchas ofertas comerciales de tecnología dirigida a ayudar a los ancianos parecen hacer un buen trabajo en la superficie, pero ...
Leer Más
Los satélites Starlink plantean problemas a los astrónomos

Los satélites Starlink plantean problemas a los astrónomos

La observación de satélites desde la tierra es un pasatiempo popular entre los astrónomos aficionados. Típicamente, los satélites ISS e ...
Leer Más
DTMF a su ordenador, con un Gamepad

DTMF a su ordenador, con un Gamepad

Aunque muchos de nosotros nunca habremos experimentado con él, la mayoría de los lectores deberían estar familiarizados con el DTMF ...
Leer Más
Mueble para impresora 3D de código abierto apilable

Mueble para impresora 3D de código abierto apilable

Una de las desafortunadas realidades de la impresión en 3D con FDM de escritorio es que los factores ambientales, como ...
Leer Más
Aprenda técnicas de purificación de agua con este kit de aprendizaje STEM

Aprenda técnicas de purificación de agua con este kit de aprendizaje STEM

Vemos muchos grandes proyectos de educación STEM. Estos proyectos tienen una forma de convertirse en algo mucho más grande. ¿Cuántos ...
Leer Más
Mantener el tiempo con las luces intermitentes

Mantener el tiempo con las luces intermitentes

Si hemos aprendido algo a lo largo de los años, es que a los hackers les gustan los relojes extraños, ...
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
Charla de Supercon: Emily Velasco quiere que trabajes raro

Charla de Supercon: Emily Velasco quiere que trabajes raro

Emily Velasco parece deleitarse absolutamente con lo raro, y creemos que eso es maravilloso. Lo raro nos une. Si puedes ...
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
Impresión 3D para un simulador de cabina de cristal

Impresión 3D para un simulador de cabina de cristal

Los aviones comerciales de hoy en día están llenos de sensores, computadoras y kilómetros y kilómetros de cableado. Dentro de ...
Leer Más
La réplica del paquete de protones es una gran construcción de Halloween

La réplica del paquete de protones es una gran construcción de Halloween

En 1984, los Cazafantasmas defendieron a la ciudad de Nueva York de un ataque de fenómenos sobrenaturales. En su honor, ...
Leer Más
The Boxy All-In-One Nintendo 64 Tu yo de los años 90 siempre se ha buscado

The Boxy All-In-One Nintendo 64 Tu yo de los años 90 siempre se ha buscado

En 1997, lo más probable es que si no tenías una Nintendo 64, la querías. (No importa que los juegos ...
Leer Más
Los sueños eléctricos ayudan a las vacas a sobrevivir en el desierto de lo real

Los sueños eléctricos ayudan a las vacas a sobrevivir en el desierto de lo real

Las fotos de una vaca con un par de gafas de realidad virtual cómicamente sobredimensionadas se difundieron recientemente como un ...
Leer Más
Desmontaje: El PreComputador 1000 de VTech es un PC icónico en una envoltura de juguete

Desmontaje: El PreComputador 1000 de VTech es un PC icónico en una envoltura de juguete

En los días anteriores a que los niños pudieran ser aplacados con un teléfono Android de 50 dólares, a muchos ...
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
El laboratorio de juegos: La otra insignia de la FPGA para la consola de juegos

El laboratorio de juegos: La otra insignia de la FPGA para la consola de juegos

Cualquiera que haya estado en la Supercon, sin duda recordará las insignias que colgaban en el cuello de todos. Algunas ...
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
Turbina de agua de código abierto de 50 dólares de partes reprogramadas

Turbina de agua de código abierto de 50 dólares de partes reprogramadas

El fácil acceso a una energía eléctrica confiable es algo que muchos de nosotros damos por sentado, pero en los ...
Leer Más
El fracaso de la semana: El Bote de la Impresora 3D Limpia que no

El fracaso de la semana: El Bote de la Impresora 3D Limpia que no

Algunos de ustedes estarán familiarizados con la idea de usar un cepillo como un limpiador de boquillas en una impresora ...
Leer Más

Deja un comentario