1 Punkte von GN⁺ 2024-11-28 | 1 Kommentare | Auf WhatsApp teilen
  • Einsatz von C-Reduce

    • C-Reduce ist ein von Regehr und seinen Kollegen entwickeltes Tool, das verwendet wird, um Reproducer für C-Compiler-Bugs zu minimieren.
    • Es ist zum Beispiel nützlich, wenn man eine 10.000 Zeilen lange C-Datei verkleinern möchte, die einen Clang-Bug auslöst.
    • C-Reduce ist nicht nur auf die Sprache C beschränkt, sondern kann auf verschiedene Sprachen angewendet werden.
  • Voraussetzungen für C-Reduce

    • Es wird eine deterministische Bedingung benötigt.
    • Ein schneller Reproducer hilft dabei, die Reduktionsgeschwindigkeit zu erhöhen.
    • Es wird mindestens eine veränderbare Quelldatei benötigt, die C-Reduce verkleinern kann.
  • Fallbeispiel eines RustPython-Bugs

    • Um einen in RustPython aufgetretenen Bug zu melden, wurde das Skript interesting.sh geschrieben.
    • Das Skript sucht nach dem Ausführen von RustPython mit grep nach einer bestimmten Fehlermeldung.
  • Ausführung von C-Reduce

    • Durch das Ausführen von C-Reduce konnte die Dateigröße erfolgreich um mehr als 50 % reduziert werden.
    • Mit der Option --not-c wurden C-spezifische Passes vermieden und die Ausführung für Python optimiert.
    • Dadurch ließ sich die Datei am Ende schnell und einfach verkleinern.
  • Fazit

    • C-Reduce lässt sich auf verschiedene Sprachen anwenden und ist nützlich, um Dateien schnell und effizient zu verkleinern.
    • Es handelt sich um einen Open-Source-Blog; wenn es Fehler gibt, können Änderungsvorschläge gemacht werden.

1 Kommentare

 
GN⁺ 2024-11-28
Hacker-News-Kommentare
  • Ein Nutzer teilt eine Methode zum Verkleinern von Dateien und erklärt, wie man sie mit RustPython und scrapscript einrichtet

    • Mit dem Befehl git clone werden RustPython und scrapscript geklont und anschließend mit cargo build --release gebaut
    • Die Datei interesting.sh wird heruntergeladen und mit Ausführungsrechten versehen
    • Mit dem Befehl nix run nixpkgs#creduce wird die Datei verkleinert
  • Die Nutzung von C-Reduce wird empfohlen, außerdem wird dazu geraten, auch das Tool Shrinkray auszuprobieren

    • Shrinkray ist formatunabhängig und auch dann nützlich, wenn C-Reduce nicht gut funktioniert
  • Es wird erwähnt, dass 2012 ein Paper zu C-Reduce veröffentlicht wurde

    • Das Paper von John Regehr et al. erklärt, wie C-Reduce funktioniert
  • Jemand erfährt hier zum ersten Mal von C-Reduce und empfindet eine ähnliche Faszination wie damals bei der ersten Entdeckung von git bisect

    • Man beschließt, sich das für den späteren Bedarf zu merken
  • Jemand findet einen Artikel, der ein Beispiel für C-Reduce zeigt, hat aber Schwierigkeiten zu verstehen, wie in jeder Iteration entschieden wird, was entfernt werden soll

    • Es wird vermutet, dass es einen Tokenisierungsprozess gibt, aber es ist schwer nachzuvollziehen, wie das sprachübergreifend funktioniert
  • C-Reduce wird als äußerst nützlich bewertet

    • Mit CSmith werden zufällige Testprogramme erzeugt, und bei Abstürzen wird automatisch C-Reduce verwendet, um das Problem zu minimieren
  • Delta-Debugging ist kein neues Konzept

    • Eine Delta-Debugging-Implementierung namens "delta" ist über 19 Jahre alt und wurde als Open Source veröffentlicht
    • In der LLVM-Einführung wird sie als Standardwerkzeug für Delta-Debugging erwähnt
  • Es funktioniert auch gut mit SQL und wird bei der Arbeit eingesetzt

    • Entdeckt wurde es über SQLancer
  • Ohne eine Erklärung, warum es auch bei anderen Sprachen als C funktioniert, fällt es schwer, das zu glauben

    • Da kein LLM verwendet wird, ist die Verwirrung umso größer
  • Als guter Nachfolger von C-Reduce wird cvise empfohlen

    • Es wurde mehrfach verwendet, um Assemblerprogramme auf eine minimale Menge zu reduzieren, und ist ein sehr nützliches Programm