2 puntos por GN⁺ 2023-11-12 | 1 comentarios | Compartir por WhatsApp

Introducción al depurador Spray

  • Spray es un depurador simple y fácil de entender para código C.
  • Ofrece funciones para controlar la ejecución de un programa en ejecución e inspeccionar y modificar su estado.
  • Su desarrollo comenzó por curiosidad sobre el funcionamiento interno de los depuradores y para explorar formas de hacer la depuración más accesible.

Funciones principales

  • Establecer puntos de interrupción en funciones, líneas dentro de un archivo y direcciones.
  • Mostrar y establecer valores de variables, direcciones de memoria y registros.
  • Resaltado de sintaxis de C, backtrace y ejecución paso a paso.
  • Función de filtros para especificar el formato de salida de los comandos.

Hoja de ruta de desarrollo

  • Mostrar y modificar estructuras complejas.
  • Resaltado de sintaxis para estructuras complejas.
  • Backtrace basado en DWARF en lugar de punteros de marco.
  • Funciones inline, carga de bibliotecas externas y captura de señales enviadas al programa que se está depurando.

Cómo instalar

  • Parte del frontend de Spray está escrita en Scheme y se compila a C mediante CHICKEN Scheme.
  • Es necesario instalar CHICKEN, y como depende de libdwarf, esta debe instalarse primero.
  • Clona el repositorio e instala Spray con el comando make.
  • Agrégalo a $PATH para poder usarlo como un comando normal.

Cómo usar Spray

  • El binario que se va a depurar debe tener habilitada la información de depuración y la optimización debe estar desactivada.
  • El programa debe compilarse usando Clang.
  • Pasa como primer argumento el nombre del binario que se va a depurar, y después los argumentos del programa que se va a depurar.

Comandos

Leer y escribir valores

  • Mostrar o establecer el valor de variables, registros y direcciones.
  • Los nombres de los registros usan el prefijo % según la sintaxis de ensamblador AT&T.
  • Los valores pueden especificarse en decimal o hexadecimal.

Puntos de interrupción

  • Establecer y eliminar puntos de interrupción en funciones, líneas dentro de un archivo y direcciones.
  • Usa el comando continue para seguir ejecutando hasta el siguiente punto de interrupción.

Ejecución paso a paso

  • Avanzar a la siguiente línea, entrar en una función o salir de la función actual.
  • Avanzar a la siguiente instrucción e imprimir el backtrace desde la posición actual.

Filtros

  • Se pueden usar filtros para cambiar el formato de salida.
  • Agrega un filtro después de los comandos print y set para cambiar el formato de salida.

Cómo contribuir

  • Toda contribución es bienvenida; antes de enviar un pull request, ejecuta la suite de pruebas local para verificar que no se haya roto ninguna funcionalidad.
  • Se pueden ignorar los fallos de pruebas causados por errores off-by-one en ciertos valores.

Referencias

  • La serie de blogs "Writing a Linux Debugger" de Sy Brand, el estándar DWARF 5, la documentación de libdwarf y la publicación "How debuggers work" de Eli Bendersky.

Opinión de GN⁺

Lo más importante de este artículo es que Spray es un depurador amigable para el usuario enfocado en código C, y que pone el acento en hacer la depuración más accesible. Resulta atractivo porque ayuda a simplificar tareas de depuración complejas al ofrecer una estructura y comandos fáciles de entender, incluso para ingenieros de software principiantes. Además, la hoja de ruta de desarrollo y la forma de contribuir están presentadas con claridad, lo que ofrece una oportunidad interesante para desarrolladores que quieran participar en un proyecto de código abierto.

1 comentarios

 
GN⁺ 2023-11-12
Opiniones de Hacker News
  • El código del programador adolescente está especialmente limpio, es consistente y está bien modularizado. Este tipo de proyecto requiere conocimientos poco comunes sobre formatos binarios y APIs del kernel. Incluso muchos programadores "avanzados" podrían tener dificultades para construir algo así a nivel conceptual.

    • Me pregunto cómo alguien de 17 años adquiere este conocimiento. ¿Será por libros, colegas, clubes de programación o padres programadores?
  • Es interesante leer el código de programadores jóvenes. Aunque les falta experiencia, se puede ver que diseñan con un nivel considerable de conocimiento. El autor parece aprender rápido, y el resultado de 6 meses de trabajo es excelente.

  • Me impresiona este nivel de dedicación. Recomendaría participar en programas como Google Summer of Code, KDE Season of Code, Linux Foundation LFX y X.org EVoC. Hay muchos problemas interesantes. Ojalá hubiera conocido estos programas cuando era estudiante. Ahora tengo un trabajo de tiempo completo y no tengo tiempo para contribuir al código abierto.

  • Al revisar el proyecto por primera vez, se ve bien organizado. Merece elogios.

    • Me pregunto cuánto tiempo lleva programando y con qué lenguaje empezó. Hay muchos desarrolladores décadas mayores que tú que no saben escribir un Makefile.
    • Me pregunto si usar emojis inline en el código fuente es una moda reciente o si es para llamar la atención sobre la entrada no ASCII.
  • Felicitaciones por el proyecto y mucha suerte. Los compiladores fueron uno de los primeros temas que me interesaron en la computación.

    • Hay un libro que he leído varias veces y que ahora está disponible gratis. Trata sobre compiladores, pero también podría ser interesante para el tema de depuración.
  • Esto demuestra que los chicos de 17 años todavía saben lo que es un CD. Tal vez el ícono de guardar con disquete todavía no esté tan obsoleto.

  • Impresiona el conocimiento y la madurez que muestra a los 17 años. Los temas que investiga y aplica son los que se esperarían a nivel universitario, y este proyecto pertenecería a un curso de posgrado. Le deseo una carrera exitosa.

  • Recuerdo haber escrito una biblioteca de gráficos 2D usando Turbo Pascal cuando era joven. Fue antes de descubrir internet, así que quedó como una diversión personal, pero creo que hiciste bien en crear algo para que otros lo vieran. El código está limpio, bien comentado y el README es claro.

    • Publicar tu trabajo al mundo da miedo, pero lo que la gente dice muchas veces también habla de ellos mismos, así que no tienes que tomar sus palabras demasiado en serio.
  • Crear un tutorial de "cómo escribir un depurador" junto con el proyecto podría ser tedioso, pero sería muy útil.

  • Me pregunto por qué dejas un espacio entre el nombre de la función y los argumentos. Como alguien que ha leído código C durante 18 años, eso se siente algo extraño.

    • Prefiero el estilo BSD, y si usas sistemas BSD, te sugiero consultar man style e intentar ese estilo.