Schlagwort: Debuggen

dw-link: Ein neuer Hardware-Debugger für ATtinys und kleine ATmegas

Wie in einem früheren Blogbeitrag erwähnt, sind Hardware-Debugger die Königs-Klasse der eingebetteten Debugging-Werkzeuge. Bis heute gab es jedoch nur sehr wenige, relativ teure Tools für die debugWIRE-Schnittstelle, die von den klassischen ATtinys und einigen ATmega-MCUs verwendet wird.

Die gute Nachricht ist, dass man jetzt einen Arduino Uno, Nano oder Pro Mini in einen debugWIRE-Hardware-Debugger verwandeln kann, der mit avr-gdb, der AVR-Version des GNU-Projektdebuggers, kommunizieren kann.

Weiter lesen

Überraschung, Überraschung!

Das Titelbild dieses Beitrags ist von Albert Guillaume – Gils Blas, 24 décembre 1895, Public Domain, Link

Wenn man ein Werkzeug für ein Protokoll entwickelt, das undokumentiert ist, ist es nicht verwunderlich, dass man auf überraschende Situationen stößt. Und genau das habe ich bei der Entwicklung des Hardware-Debuggers dw-link erlebt, der debugWIRE-MCUs mit dem GDB-Debugger verbindet. Obwohl ein wesentlicher Teil des debugWIRE-Protokolls rekonstruiert wurde, habe ich einige überraschende Phänomene beobachtet: MCUs mit gespaltener Persönlichkeit, Stuck-at-One-Bits in Programmzählern, halblegale Opcodes und mehr.

Weiter lesen

Debuggen eines Debuggers mit sich selbst

Das vorgestellte Bild dieses Beitrags ist ein Comic aus xkcd.com.

Der obige xkcd-Comic mit dem Titel Debugger spielt auf das Problem an, dass man bei der Anwendung einer bestimmten Methode auf sich selbst möglicherweise nicht das bekommt, wonach man gefragt hat. Turings Halteproblem ist ein bekanntes Beispiel dafür: Man kann algorithmisch nicht entscheiden, ob ein Algorithmus auf einer gegebenen Eingabe terminiert. Haben wir dieses Problem auch bei Debuggern? Insbesondere habe ich mich gefragt, ob es sinnvoll ist, den Hardware-Debugger, den ich entwickle, mit sich selbst zu debuggen.

Weiter lesen

Link-Zeit-Optimierung und das Debuggen von Objekt-orientierten Programmen auf AVR MCUs

Das Titelbild dieses Beitrags basiert auf einem Bild von TheDigitalArtist auf Pixabay.

Link-Zeit-Optimierung (LTO) ist eine sehr leistungsfähige Compiler-Optimierungstechnik. Wie ich feststellen musste, ist LTO nicht verträglich mit dem Debuggen objektorientierter Programme unter GCC, zumindest für AVR-MCUs. Ich bemerkte das im Zusammenhang mit dem Debuggen eines Arduino-Programms und es dauerte eine ganze Weile, bis feststellte, dass LTO hier der Schuldige ist.

Weiter lesen

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

(Brian W. Kernighan)

Diese Zitat vom Vater der Programmiersprache C trifft den Nagel auf den Kopf und sollte speziell dann beachtet werden, wenn man mal wieder dabei ist, eine komplexe Implementation zu kreieren: Mach’s so einfach wie möglich!

Debuggen(4): Einen Debug-Stub benutzen

Das Titelbild ist von Hebi B. auf Pixabay

Dieser Blogbeitrag zeigt, wie man in 7 einfachen Schritten zu einer funktionierenden Debugging-Lösung mit einem gdb-Stub für einige 8-Bit-AVR-MCUs gelangt. Die einzige zusätzliche Hardware, die man benötigt, ist ein ISP-Programmiergerät, um einen neuen Bootloader zu brennen (wenn man mit einem sehr langsam laufenden Programm zufrieden ist, braucht man nicht einmal das).

Weiter lesen

Debuggen(3): Debuggen ist, als ob man ein Detektiv in einem Krimi ist, in dem man auch der Mörder ist

Titelbild: OpenClipart-Vectors auf Pixabay.

Man muss dem Titel (zitiert aus einem Tweet von Filipe Fortes) hinzufügen, dass der Detektiv an einem Gedächtnisverlust leidet. Andernfalls könnte der Fall leicht gelöst werden. Ähnlich beim Debugging: Wenn ich nur wüsste, welche fiesen Dinge ich im Quellcode versteckt habe, könnte ich sie einfach entfernen – aber ich weiß es einfach nicht. In diesem Blogbeitrag werden wir einen Blick darauf werfen, welche Art von Werkzeugen man verwenden kann, um die im Keller versteckten Leichen zu finden (speziell für eingebettete Systeme).

Weiter lesen

Debuggen(2): Es ist die Hardware, Dummkopf!

Wenn etwas schiefgeht, ist es nicht immer die Schuld des Programmierers. Es könnte auch an der Hardware liegen (bzw. dem Elektroingenieur, der diese entworfen hat). Wenn man ein System als Bastler entwickelt, ist man aber meist beides: Der Elektroingenieur und der Programmierer (sodass man sich immer selbst die Schuld geben darf). In diesem Blogbeitrag werfen wir einen Blick auf einige der Dinge, die auf der Hardware-Seite schiefgehen können, speziell bei Projekten mit AVR-MCUs.

Weiter lesen

Debuggen(1): Was für ein Bug ist das?

Titelbild: Mit freundlicher Genehmigung des Naval Surface Warfare Center, Dahlgren, VA., 1988. – U.S. Naval Historical Center Online Library Foto NH 96566-KN

Wenn man darüber nachdenkt, wann man das letzte Mal ein System entworfen hat, das von Anfang an funktionierte und keine Korrekturen benötigte, wird man vermutlich feststellen, dass das schon ziemlich lange her ist. Tatsächlich verbringt man normalerweise sehr viel Zeit damit, Fehler zu identifizieren und zu korrigieren, die umgangssprachlich als Bugs bezeichnet werden. In diesem Blogbeitrag gebe ich einen Überblick über verschiedene Formen von Bugs und gehe darauf ein, wie man sie loswerden kann.

Weiter lesen

Copyright © 2025 Arduino-Bastelecke

Thema von Anders NorenHoch ↑