Clojure Debugging in Emacs
TL;DR:
Die Kombination aus Emacs und CIDER ist meiner Meinung nach allem anderen weit überlegen. Debugging mit CIDER macht tatsächlich Spaß und geht einfach von der Hand.
Eine aktuelle Verson von CIDER (0.11+) vorausgesetzt, ist das Debugging von einzelnen Funktionen oder ganzen Funktionalitäten sehr einfach. Einfach an die Funktion, die getestet werden soll, ein #dbg
voranstellen. Dies aktiviert den Debugger, wenn die Funktion ausgeführt wird. Mit n
kann dann die Evaluation Schrittweise durchgeführt werden. Das Ergebnis wird stets hinter der Funktion angezeigt.
Mit i
können Ausdrücke an der aktuellen Stelle eingefügt (und direkt evaluiert) werden. Dies ist extrem hilfreich, wenn man verschiedene Inputs testen will, eine Schleife vorzeitig beenden will oder ein Fehlverhalten testen will. Mit l
kann man sich zu jeder Zeit alle lokalen Variablen und deren Werte anzeigen lassen.
Ein weiteres cooles Feature von CIDER ist der enlighten-mode
. Hier werden allen Symbolen/Variablen (die evaluiert werden) deren aktuellen Werte vorangestellt. Besonders bei komplexeren Funktionen mit vielen Bindings und/oder Verschachtelungen sieht man sofort, welcher Pfad evaluiert wurde und mit welchen Bindings. Die in anderen Programmiersprachen üblichen var_dump
/println
Debug-Sessions wirken dagegen, als kämen sie aus der Steinzeit.
Zum Aktivieren genügt es, ein #light
vor ein defn
oder def
zu schriben.