- Spray ist ein kleiner Debugger für C-Code, der seine Funktionen einfach und verständlich hält, um laufende Programme zu steuern sowie ihren Zustand zu prüfen und zu verändern
- Unterstützt werden Breakpoints nach Funktion, Datei-Zeile und Adresse, das Ausgeben und Setzen von Variablen, Speicher an Adressen und Registern, C-Syntax-Highlighting, Backtraces, Stepping auf Instruktions-, Funktions- und Zeilenebene sowie Formatfilter für Befehlsausgaben
- REPL-Befehle wie
print/set,break/delete,continue,next,step,leave,instundbacktracesteuern die Ausführung und lesen bzw. schreiben Werte - Hinter
printundsetkönnen per Pipe (|) Filter angehängt werden; mitdec,hex,addr,bits,bytes,deref/*lässt sich derselbe 64-Bit-Wert in verschiedenen Formaten anzeigen oder eine Adresse dereferenzieren - Für den Build werden CHICKEN Scheme und libdwarf benötigt; nach dem Klonen inklusive Submodule erzeugt
makeim Verzeichnisbuilddas Binaryspray - Das zu debuggende Binary muss mit dem Flag
-ginklusive Debug-Informationen kompiliert werden; für die beste Ausgabe sollten Optimierungen deaktiviert werden - Spray wurde nur mit Clang getestet; da Compiler Debug-Informationen für denselben Code unterschiedlich erzeugen, sollten Programme, die mit Spray debuggt werden, mit
clangkompiliert werden - Auf der Roadmap stehen noch Ausgabe und Änderung komplexer Structs, Syntax-Highlighting für komplexe Structs, DWARF-basierte Backtraces statt Frame Pointer, Inline-Funktionen, Laden externer Bibliotheken und das Abfangen von Signalen, die an das zu debuggende Programm gesendet werden
1 Kommentare
Meinungen auf Hacker News
Besonders sauber, konsistent und gut modularisiert; außerdem behandelt es ein Problem, das ziemlich tiefes Wissen über Binärformate und Kernel-APIs erfordert.
Viele „Senior“-Programmierer hätten Schwierigkeiten, so etwas auch nur konzeptionell zu bauen – das genaue Gegenteil von „die Jugend von heute …“.
Ich frage mich: Wie kommt ein 17-Jähriger an Wissen auf diesem Niveau? Bücher, Gleichaltrige, Programmierclubs, programmierende Eltern oder so etwas?
Mit reiner Neugier, der großen Voraussetzung, „einfach Zugang“ zur nötigen Hardware zu haben, und ein paar Büchern und Zeitschriften kommt man schon ziemlich weit.
Meine Eltern waren keine Programmierer, aber mein Vater kaufte 1984 früh einen Computer und brachte später über seine Arbeit Compiler wie TurboPascal und C++ mit nach Hause, damit ich damit experimentieren konnte.
Ich lernte hauptsächlich aus Zeitschriften und Büchern, hatte später ein wenig Kontakt zu Gleichaltrigen aus der Demoszene und kaufte mir per Post Disketten mit Dokumentation (https://fr.wikipedia.org/wiki/DP_Tool_Club). Das waren zum Beispiel Materialien wie https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List.
Ich baute kleine Dinge und iterierte schrittweise: ein Windowing-Toolkit für CGA, einen Tetris-Klon, einen Bomberman-Klon, FFT-Software und schließlich sogar 3D-Rendering in Echtzeit mit Phong-Rendering, rein in Software und ohne FPU (https://github.com/thbar/demomaking#obez-1995).
In der Demoszene traf ich zufällig andere Teenager, die dasselbe machten; ich war also kein völlig isolierter Sonderfall.
Ich glaube, ein neugieriges Kind kann heute noch viel weiter kommen, wenn diese Neugier nur gut gefördert wird.
Und deine Vermutung stimmt: Mein Vater ist Informatiker.
Manche Kinder sind wirklich unglaublich. Ich habe in dem Alter geweint, weil ich beim Lernen von C++ frustriert war.
Cool. Ich wünschte, ich hätte in jungen Jahren auch so viel Hingabe gehabt.
Ich würde empfehlen, bei Programmen wie Google Summer of Code, KDE Season of Code, Linux Foundation LFX oder X.org EVoC mitzumachen.
Dort gibt es viele interessante Probleme zu lösen. Ich wünschte, ich hätte davon gewusst, als ich Student war; inzwischen arbeite ich Vollzeit und habe keine Zeit, zu Open Source beizutragen.
Mach weiter so.
Ich habe mir das Projekt zum ersten Mal kurz angesehen, und es wirkt gut organisiert. Großartig.
Ich frage mich, wie lange du schon programmierst und mit welcher Sprache du angefangen hast. Ich kenne einige Entwickler, die Jahrzehnte älter sind und immer noch kein Makefile schreiben können[1].
Ich frage mich, was es mit den Inline-Emojis im Source auf sich hat. Machen das die coolen Kids heute alle, oder sollen sie einen für Eingaben sensibilisieren, die nicht ASCII sind?
[1]: Noch mehr Leute können dynamisch erzeugte Targets weder verwenden noch verstehen.
Die Emojis waren so ein Scherz, den ich ungefähr eine Woche lang gemacht habe. In der Rust-Welt sehe ich Emojis deutlich häufiger. Ich habe sie einfach nicht extra entfernt.
Das Käfer-Emoji bei der PID finde ich lustig. Die in den Kommentaren verschwinden vielleicht irgendwann. Bisher hatte ich aber keine Probleme mit Editoren, und Helix, Emacs und VSCode funktionieren alle gut.
Ich überlege, ob auch die Ausgabe von Emojis auf stdout in der REPL deaktiviert werden sollte, wenn Terminalfarben ausgeschaltet sind.
Glückwunsch, und viel Erfolg mit deinen Projekten.
Compiler waren eines der ersten Kaninchenlöcher, durch die ich mich für Computing interessiert habe.
Eines der Bücher, das ich mehrfach und endlos gelesen habe, ist inzwischen kostenlos verfügbar. Es geht zwar nicht um Debugging, sondern um Compiler, könnte aber trotzdem auf deine Leseliste passen.
„Compiler Design in C“
https://holub.com/compiler/
Es ist etwas älter, könnte aber interessant sein.
Leider sind viele Bücher zu elfenbeinturmartig.
Mit 17 schon so viel Wissen und Reife – sehr beeindruckend.
Die Themen, mit denen du dich beschäftigst und experimentierst, entsprechen dem, was man auf Bachelor-Niveau erwarten würde, und dieses Projekt kommt darin eher an das Niveau eines Master-/Graduiertenkurses heran.
Meinen Respekt, und ich wünsche dir eine erfolgreiche Karriere.
In ein paar Jahren wird er immer noch ein junger Technikenthusiast sein und könnte dann noch beeindruckendere Projekte umsetzen.
Zu diesem Zeitpunkt wird vielleicht nicht mehr allgemein bekannt sein, wie weit er in diesem Alter schon voraus war. Es gibt kluge Leute, die auch erst in ihren Zwanzigern anfangen und beeindruckende Dinge schaffen, und im selben Alter werden sie für die meisten Beobachter wie Peers wirken.
Trotzdem kann dieser Frühstart ein unfairer Vorteil sein, den er weiter behalten kann.
In Jahren oder Jahrzehnten könnte er sich als eine Art „Geheimwaffe“ erweisen.
Ich lese gern Code von jungen Programmierern. Es ist interessant zu sehen, wie sie das Ganze entwerfen, wenn sie schon ein ziemlich hohes Wissensniveau haben, aber noch nicht viele Jahre Erfahrung.
Der Autor wirkt wie jemand, der schnell lernt, und für sechs Monate Arbeit ist das großartig.
Offenbar wissen 17-Jährige noch, was eine CD ist.
Vielleicht müssen wir das Disketten-Speicher-Icon doch noch nicht ausmustern :P
Schön. Als ich in dem Alter war, erinnere ich mich, dass ich in Turbo Pascal eine 2D-Grafikbibliothek gebaut habe, bei der der eigentliche Zeichencode mit handoptimiertem Assembly eingebettet war.
Allerdings war das vor meiner Entdeckung des Internets; das Bauen machte Spaß, endete aber als persönliches Projekt, das nirgends verwendet wurde.
Dass du den nächsten Schritt gegangen bist und ein persönliches Projekt zu etwas entwickelt hast, das andere sehen und vielleicht selbst nutzen können, ist großartig. Insgesamt ist es sehr ordentlich, gut kommentiert und das README ist klar.
Etwas öffentlich zu machen kann beängstigend sein, aber denk daran: Was Menschen sagen, sagt – besonders wenn es um dich geht – genauso viel über sie selbst aus wie über deine Arbeit.
Nebenbei bin ich tatsächlich mehr an Motes interessiert als an diesem Projekt und werde es jetzt ausprobieren :)
Beim Emacs-Plugin kann es seltsames Verhalten geben. Die Skripte selbst haben in den letzten Wochen für mich aber perfekt funktioniert.
Ich hoffe, es gefällt dir :D
Cool.
Ich werde den Code heute Abend klonen und mir ansehen.
Da wir ähnliche Interessen haben, möchte ich zu diesem Projekt beitragen.
Ich habe an den meisten Stellen Kommentare hinterlassen, weiß aber nicht, ob sie alle hilfreich sind.
Debugger sind besonders schwer zu schreiben, und dieser ist ziemlich gut.