1 puntos por GN⁺ 2024-11-28 | 1 comentarios | Compartir por WhatsApp
  • Uso de C-Reduce

    • C-Reduce es una herramienta desarrollada por Regehr y sus colegas, utilizada para minimizar reproductores de bugs de compiladores de C.
    • Por ejemplo, es útil cuando se quiere reducir un archivo de C de 10,000 líneas que provoca un bug en Clang.
    • C-Reduce no se limita solo al lenguaje C y puede aplicarse a varios lenguajes.
  • Requisitos de C-Reduce

    • Se necesita una condición determinista.
    • Tener un reproductor rápido ayuda a acelerar la reducción.
    • Se necesita uno o más archivos fuente modificables que C-Reduce pueda reducir.
  • Caso de bug en RustPython

    • Para reportar un bug ocurrido en RustPython, se escribió el script interesting.sh.
    • El script ejecuta RustPython y luego busca un mensaje de error específico con grep.
  • Ejecución de C-Reduce

    • Al ejecutar C-Reduce, se logró reducir el tamaño del archivo en más del 50%.
    • Se usó la opción --not-c para evitar pases específicos de C y optimizarlo para Python.
    • Como resultado, fue posible reducir el archivo de forma rápida y sencilla.
  • Conclusión

    • C-Reduce puede aplicarse a diversos lenguajes y es útil para reducir archivos de manera rápida y eficiente.
    • Es un blog de código abierto, por lo que si hay errores se pueden proponer cambios.

1 comentarios

 
GN⁺ 2024-11-28
Comentarios en Hacker News
  • Un usuario compartió un método para reducir archivos y explicó cómo configurarlo usando RustPython y scrapscript

    • Clonó RustPython y scrapscript con el comando git clone y compiló con cargo build --release
    • Descargó el archivo interesting.sh y le dio permisos de ejecución
    • Redujo el archivo con el comando nix run nixpkgs#creduce
  • Recomiendan usar C-Reduce y también probar una herramienta llamada Shrinkray

    • Shrinkray es independiente del formato y resulta útil incluso cuando C-Reduce no funciona bien
  • Mencionan que el artículo sobre C-Reduce fue publicado en 2012

    • El artículo de John Regehr et al. explica cómo funciona C-Reduce
  • Alguien dijo que acababa de conocer C-Reduce y que le produjo la misma emoción que cuando descubrió git bisect por primera vez

    • Decidió recordarlo para usarlo más adelante cuando lo necesite
  • Encontraron un artículo que muestra ejemplos de C-Reduce, pero les cuesta entender cómo decide qué eliminar en cada iteración

    • Suponen que hay un proceso de tokenización, pero les cuesta entender cómo funciona entre distintos lenguajes de programación
  • Consideran que C-Reduce es muy útil

    • Generaron programas de prueba aleatorios con CSmith y, cuando ocurría un fallo, usaban automáticamente C-Reduce para reducir el problema
  • La depuración delta no es un concepto nuevo

    • Una implementación de depuración delta llamada "delta" existe desde hace más de 19 años y fue liberada como código abierto
    • En la introducción a LLVM se menciona como una herramienta estándar de depuración delta
  • También funciona bien con SQL y lo están usando en el trabajo

    • Lo conocieron a través de SQLancer
  • Sin una explicación de por qué funciona también con lenguajes distintos de C, les resulta difícil creerlo

    • Como no usa LLM, eso lo hace aún más confuso
  • Recomiendan cvise como un buen sucesor de C-Reduce

    • Lo han usado varias veces para reducir programas en ensamblador a un conjunto mínimo, y les parece una herramienta muy útil