HN vorgestellt: Jugendlicher investierte mit 17 sechs Monate in die Entwicklung eines C-Debuggers
(github.com/d4ckard)Einführung in den Spray-Debugger
- Spray ist ein einfacher und leicht verständlicher Debugger für C-Code.
- Er bietet Funktionen zur Steuerung der Ausführung laufender Programme sowie zur Prüfung und Änderung ihres Zustands.
- Die Entwicklung begann aus Neugier auf die interne Funktionsweise von Debuggern und mit dem Ziel, Debugging zugänglicher zu machen.
Hauptfunktionen
- Setzen von Breakpoints für Funktionen, Zeilen in Dateien und Adressen.
- Ausgeben und Setzen von Werten von Variablen, Speicheradressen und Registern.
- C-Syntax-Highlighting, Backtrace und schrittweise Ausführung.
- Filterfunktionen zur Festlegung des Ausgabeformats von Befehlen.
Entwicklungs-Roadmap
- Ausgabe und Änderung komplexer Strukturen.
- Syntax-Highlighting für komplexe Strukturen.
- DWARF-basierter Backtrace statt eines auf dem Frame Pointer basierenden Ansatzes.
- Inline-Funktionen, Laden externer Bibliotheken und Abfangen von an das zu debuggende Programm gesendeten Signalen.
Installation
- Teile des Spray-Frontends sind in Scheme geschrieben und werden über CHICKEN Scheme zu C kompiliert.
- CHICKEN muss installiert sein; außerdem besteht eine Abhängigkeit von libdwarf, das daher zuerst installiert werden muss.
- Klone das Repository und installiere Spray mit dem Befehl
make. - Füge es zu
$PATHhinzu, damit es wie ein normaler Befehl verwendet werden kann.
Verwendung von Spray
- Für das zu debuggende Binary müssen Debuginformationen aktiviert und Optimierungen deaktiviert sein.
- Das Programm muss mit Clang kompiliert werden.
- Übergib als erstes Argument den Namen des zu debuggenden Binaries und danach die Argumente des zu debuggenden Programms.
Befehle
Werte lesen und schreiben
- Werte von Variablen, Registern und Adressen ausgeben oder setzen.
- Registernamen verwenden gemäß AT&T-Assemblersyntax das Präfix
%. - Werte können dezimal oder hexadezimal angegeben werden.
Breakpoints
- Breakpoints für Funktionen, Zeilen in Dateien und Adressen setzen und löschen.
- Mit dem Befehl
continuedie Ausführung bis zum nächsten Breakpoint fortsetzen.
Schrittweise Ausführung
- Zur nächsten Zeile gehen, in eine Funktion hineingehen oder die aktuelle Funktion verlassen.
- Zur nächsten Instruktion gehen und an der aktuellen Position einen Backtrace ausgeben.
Filter
- Es können Filter verwendet werden, um das Ausgabeformat zu ändern.
- Hänge Filter an die Befehle
printundsetan, um das Ausgabeformat zu ändern.
Mitwirken
- Alle Beiträge sind willkommen; vor einem Pull Request sollte lokal die Testsuite ausgeführt werden, um zu prüfen, ob keine Funktionen beschädigt wurden.
- Testfehlschläge durch Off-by-one-Fehler bei bestimmten Werten können ignoriert werden.
Literaturhinweise
- Blog-Serie „Writing a Linux Debugger“ von Sy Brand, der DWARF-5-Standard, die libdwarf-Dokumentation und der Beitrag „How debuggers work“ von Eli Bendersky.
Meinung von GN⁺
Das Wichtigste an diesem Beitrag ist, dass Spray ein benutzerfreundlicher Debugger für C-Code ist und darauf abzielt, Debugging zugänglicher zu machen. Besonders attraktiv ist, dass er auch für angehende Softwareingenieure leicht verständliche Strukturen und Befehle bietet und damit komplexe Debugging-Aufgaben einfacher macht. Außerdem sind die Entwicklungs-Roadmap und die Möglichkeiten zur Mitwirkung klar beschrieben, was Entwicklern, die sich an Open-Source-Projekten beteiligen möchten, eine interessante Gelegenheit bietet.
1 Kommentare
Hacker-News-Kommentare
Der Code des jugendlichen Programmierers ist besonders sauber, konsistent und gut modularisiert. Solche Projekte erfordern ungewöhnliches Wissen über Binärformate und Kernel-APIs. Selbst viele „fortgeschrittene“ Programmierer dürften Schwierigkeiten haben, so etwas auch nur auf konzeptioneller Ebene zu bauen.
Es ist interessant, den Code junger Programmierer zu lesen. Es fehlt zwar an Erfahrung, aber man sieht, wie mit beachtlichem Wissen entworfen wird. Der Autor scheint schnell zu lernen, und das Ergebnis von sechs Monaten Arbeit ist großartig.
Dieses Maß an Hingabe ist bewundernswert. Ich würde empfehlen, an Programmen wie Google Summer of Code, KDE Season of Code, Linux Foundation LFX und X.org EVoC teilzunehmen. Es gibt dort viele spannende Probleme. Ich wünschte, ich hätte als Student von solchen Programmen gewusst. Jetzt habe ich einen Vollzeitjob und keine Zeit mehr, zu Open Source beizutragen.
Auf den ersten Blick wirkt das Projekt gut organisiert. Lobenswert.
Glückwunsch zum Projekt und viel Erfolg. Compiler waren eines der ersten Themen, die mein Interesse an Computern geweckt haben.
Es zeigt, dass auch 17-Jährige noch wissen, was CDs sind. Vielleicht ist auch das Disketten-Speicher-Symbol noch nicht ganz veraltet.
Das Wissen und die Reife, die hier mit 17 Jahren gezeigt werden, sind beeindruckend. Die behandelten und angewandten Themen erwartet man eher auf Universitätsniveau, und dieses Projekt würde in einen Masterstudiengang passen. Ich wünsche eine erfolgreiche Karriere.
Ich erinnere mich daran, in jungen Jahren mit Turbo Pascal eine 2D-Grafikbibliothek geschrieben zu haben. Das war noch vor meiner Entdeckung des Internets und blieb deshalb ein persönliches Vergnügen, aber ich finde es großartig, etwas geschaffen zu haben, das andere sehen können. Der Code ist sauber, gut kommentiert und das README ist klar.
Es wäre vielleicht langweilig, zusammen mit dem Projekt ein Tutorial zum Thema „Wie man einen Debugger schreibt“ zu erstellen, aber es wäre sehr nützlich.
Ich frage mich, warum zwischen Funktionsnamen und Argumenten ein Leerzeichen steht. Als jemand, der seit 18 Jahren C-Code liest, wirkt das auf mich etwas fremd.
man styleanzusehen und diesen Stil einmal auszuprobieren.