-
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
Hacker-News-Kommentare
Ein Nutzer teilt eine Methode zum Verkleinern von Dateien und erklärt, wie man sie mit RustPython und scrapscript einrichtet
git clonewerden RustPython und scrapscript geklont und anschließend mitcargo build --releasegebautinteresting.shwird heruntergeladen und mit Ausführungsrechten versehennix run nixpkgs#creducewird die Datei verkleinertDie Nutzung von C-Reduce wird empfohlen, außerdem wird dazu geraten, auch das Tool Shrinkray auszuprobieren
Es wird erwähnt, dass 2012 ein Paper zu C-Reduce veröffentlicht wurde
Jemand erfährt hier zum ersten Mal von C-Reduce und empfindet eine ähnliche Faszination wie damals bei der ersten Entdeckung von
git bisectJemand 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
C-Reduce wird als äußerst nützlich bewertet
Delta-Debugging ist kein neues Konzept
Es funktioniert auch gut mit SQL und wird bei der Arbeit eingesetzt
Ohne eine Erklärung, warum es auch bei anderen Sprachen als C funktioniert, fällt es schwer, das zu glauben
Als guter Nachfolger von C-Reduce wird cvise empfohlen