2 puntos por GN⁺ 2023-11-12 | 1 comentarios | Compartir por WhatsApp
  • Spray es un depurador pequeño para código C, una herramienta que mantiene sus funciones simples y fáciles de entender para controlar programas en ejecución e inspeccionar o modificar su estado
  • Las funciones compatibles incluyen breakpoints por función, línea de archivo o dirección; impresión y configuración de variables, memoria por dirección y registros; resaltado de sintaxis de C; backtrace; stepping por instrucción, función o línea; y filtros de formato para la salida de comandos
  • Los comandos del REPL son print/set, break/delete, continue, next, step, leave, inst, backtrace, y permiten controlar la ejecución además de leer y escribir valores
  • Después de print y set se pueden agregar filtros con una tubería (|), y con dec, hex, addr, bits, bytes, deref/* se puede mostrar el mismo valor de 64 bits en distintos formatos o hacer desreferenciación de direcciones
  • Para compilarlo se necesitan CHICKEN Scheme y libdwarf; después de clonar también los submódulos y ejecutar make, se genera el binario spray en el directorio build
  • El binario objetivo de depuración debe compilarse con la bandera -g para incluir información de depuración, y conviene desactivar las optimizaciones para obtener la mejor salida posible
  • Spray solo ha sido probado con Clang; como cada compilador genera de forma distinta la información de depuración para el mismo código, los programas que se vayan a depurar con Spray deben compilarse con clang
  • En la hoja de ruta quedan pendientes la impresión y modificación de estructuras compuestas, el resaltado de sintaxis para estructuras compuestas, backtrace basado en DWARF en lugar de frame pointers, funciones inline, carga de bibliotecas externas y captura de señales enviadas al programa que se está depurando

1 comentarios

 
GN⁺ 2023-11-12
Opiniones de Hacker News
  • Está especialmente limpio, consistente y bien modularizado, y aborda problemas que requieren un conocimiento bastante profundo de formatos binarios y APIs del kernel
    A muchos programadores “senior” les costaría construir algo así incluso a nivel conceptual, así que es justo lo contrario de “los chicos de hoy en día...”
    Me da curiosidad cómo alguien de 17 años adquiere este nivel de conocimiento. ¿Libros, pares, clubes de programación, padres programadores o algo así?

    • Estuve en una situación parecida a una edad aún más temprana, y como era una época sin internet o con acceso limitado, creo que puedo responder
      Con curiosidad pura, la gran condición de simplemente “poder acceder” al hardware necesario, y unos cuantos libros y revistas, se puede llegar bastante lejos
      Mis padres no eran programadores, pero mi papá compró una computadora temprano, en 1984, y después pudo traer a casa compiladores como TurboPascal y C++ desde su trabajo para que yo experimentara
      Aprendí sobre todo con revistas y libros, más adelante tuve algo de contacto con otros de mi edad en la escena demoscene, y también compraba por correo discos con documentación (https://fr.wikipedia.org/wiki/DP_Tool_Club). Por ejemplo, materiales como https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List
      Fui iterando poco a poco construyendo cosas pequeñas: un toolkit de ventanas para CGA, un clon de Tetris, un clon de Bomberman, software de FFT, y al final hasta renderizado 3D en tiempo real con renderizado Phong hecho solo por software, sin FPU (https://github.com/thbar/demomaking#obez-1995)
      En la escena demoscene me crucé por casualidad con otros adolescentes que hacían lo mismo, así que no era un caso aislado del todo
      Hoy en día, un chico curioso probablemente podría llegar mucho más lejos si esa curiosidad recibe el impulso adecuado
    • Principalmente gracias a libros y blogs. Me gusta leer mucho
      Y sí, acertaste: mi papá es científico de la computación
    • En el repositorio hay enlazada una excelente serie de blogs que guía el proceso paso a paso
    • Porque los gerentes de ingeniería de software, que probablemente llevan mucho tiempo sin escribir código útil, no les dicen a los ingenieros qué hacer
    • Me recuerda al chico de 15 años que revolucionó el modding de Half-Life con Metamod
      Algunos chicos de verdad son impresionantes. Yo a esa edad me frustré aprendiendo C++ hasta ponerme a llorar
  • Qué genial. Ojalá yo hubiera tenido ese nivel de dedicación cuando era joven
    Te recomendaría probar programas como Google Summer of Code, KDE Season of Code, Linux Foundation LFX y X.org EVoC
    Hay muchos problemas interesantes que vale la pena intentar resolver. Ojalá hubiera sabido de esto cuando era estudiante; ahora trabajo tiempo completo y no tengo tiempo para contribuir a open source
    Sigue así

    • Gracias por mencionar esos proyectos. No conocía ninguno
  • Le di una primera mirada rápida al proyecto y se ve bien organizado. Excelente
    Me da curiosidad cuánto tiempo llevas programando y con qué lenguaje empezaste. Conozco bastantes desarrolladores varias décadas mayores que tú que todavía no saben usar Makefile[1]
    También me intriga cuál es la intención de los emojis inline en el código fuente. ¿Es algo que hacen todos los chicos cool hoy en día, o buscas que la gente sea más consciente de la entrada no ASCII?
    [1]: todavía hay más gente que no usa ni entiende objetivos generados dinámicamente

    • Al principio aprendí Python y C++. En algún momento me cansé de C++ y me pasé a C
      Lo de los emojis fue como una broma que duró más o menos una semana. Siento que en Rust se ven mucho más seguido. No me molesté en quitarlos
      El emoji de insecto cerca del PID me parece divertido. Los que están en comentarios quizá desaparezcan algún día. Dicho eso, hasta ahora no he tenido problemas con editores, y Helix, Emacs y VSCode funcionan bien
      También me pregunto si debería desactivar la impresión de emojis en la salida estándar del REPL cuando los colores de la terminal están desactivados
  • Felicidades, y mucha suerte con tus proyectos
    Los compiladores fueron una de las primeras madrigueras de conejo que me hicieron interesarme en la computación
    Uno de los libros que leí una y otra vez, y que ahora está disponible gratis, quizá valga la pena sumarlo a tu lista de lectura, aunque sea sobre compiladores y no sobre depuración
    “Compiler Design in C”
    https://holub.com/compiler/
    Es un libro algo viejo, pero puede resultar interesante

    • Gracias por el enlace. Siempre ando buscando libros sobre compiladores, pero muchas veces son difíciles de conseguir
      Por desgracia, muchos libros son demasiado de torre de marfil
  • Es muy impresionante tener este nivel de conocimiento y madurez a los 17
    Los temas que manejas y con los que experimentas son del tipo que se espera a nivel de licenciatura, y aun dentro de eso este proyecto se siente más cercano a una materia de posgrado
    Mis respetos, y te deseo una carrera exitosa

    • A mí también me impresiona. Es una ventaja temprana realmente excelente
      En unos años seguirá siendo un entusiasta joven de la tecnología, pero para entonces probablemente pueda hacer proyectos aún más impresionantes
      Cuando llegue ese momento, quizá ya no sea tan evidente cuánto iba adelantado a esta edad. Hay gente muy inteligente que empieza en sus 20 y también hace cosas impresionantes, y a la misma edad la mayoría de los observadores probablemente los verá como pares
      Aun así, esa ventaja temprana puede seguir siendo una ventaja injusta que se mantenga
      En algunos años o décadas podría revelarse como una especie de “arma secreta”
  • Me gusta leer código de programadores jóvenes. Es interesante ver cómo diseñan el conjunto cuando tienen un nivel de conocimiento bastante alto pero todavía no cuentan con años de experiencia
    El autor parece alguien que aprende rápido, y como resultado de seis meses de trabajo está excelente

  • Al parecer los chicos de 17 todavía saben lo que es un CD
    Quizá todavía no haga falta retirar el ícono de guardar en disquete :P

  • Está bien. Recuerdo que a esa edad, en Turbo Pascal, metí ensamblador optimizado a mano dentro del código de dibujo real para hacer una biblioteca de gráficos 2D
    Pero eso fue antes de descubrir internet, así que aunque construirlo fue divertido, terminó como un proyecto personal que no se usó en ningún lado
    Es excelente que él haya llegado al siguiente paso: convertir un proyecto personal en algo que otras personas puedan ver y quizá incluso usar directamente. En general está muy ordenado, bien comentado y el README es claro
    Publicar algo al mundo puede dar miedo, pero ayuda recordar que lo que la gente dice, especialmente cuando se trata de ti, habla tanto de ellos mismos como de tu trabajo
    Además, en realidad me interesa más Motes que este proyecto, así que voy a probarlo ahora mismo :)

    • Hace unos días estuve usando Motes y encontré algunos bugs en el código
      Puede haber comportamientos raros en el plugin de Emacs. Aun así, los scripts me han funcionado perfectamente durante las últimas semanas
      Ojalá te guste :D
  • Genial
    Esta noche voy a clonar el código para revisarlo
    Como mis intereses son parecidos, me gustaría contribuir a este proyecto

    • Suena muy bien. Si tienes preguntas sobre el código, no dudes en contactarme
      Dejé comentarios en la mayoría de los lugares, aunque no sé si todos serán de ayuda
  • Un depurador es especialmente difícil de escribir, y este está bastante bien

    • Gracias. A veces sí fue bastante pesado :D