Last Updated on 3. October 2026 by SuffocationLink status: OK
Gerade bei neuen Entwicklungen ist es wichtig, ein paar Ausgaben über die serielle Schnittstelle oder ein anderes Medium zu schicken. Natürlich können diese Ausgaben einfach gelöscht oder ausdokumentiert werden. Aber spätestens, wenn die Implementierung erweitert wird, werden sie wieder benötigt.
Es gibt unterschiedliche Ansätze, welche ich hier kurz vorstellen möchte. Welche Variante die richtige ist, muss jeder für sich selbst entscheiden.
Boolesche Variable + IF
Verwendung einer globalen booleschen Variable und einer IF-Bedingung für jede Ausgabe.
bool debug = true;
void funktion1(){
// ....
if(debug){
Serial.println("Debug message");
}
// ....
}
Diese Variante ermöglicht es, das Debugging auch noch während des Betriebes einzuschalten. Dies ist bei den folgenden Varianten nicht möglich. Der größte Nachteil ist der zusätzliche Code und der Speicher für die Texte. Um Speicher zu sparen, können die Texte ins EEPROM oder in den Flash Speicher ausgelagert werden. Hier ein Beispiel für den Flash Speicher:
bool debug = true;
void funktion1(){
// ....
if(debug){
Serial.println(F("Debug message"));
}
// ....
}
Preprocessor directive
Im folgenden Beispiel wird die Variante von oben mit Präprozessoranweisungen realisiert. Fällt das #define oben weg, werden auch die Ausgaben nicht eincompiliert. Dies spart Speicher ein. Ein Nachteil ist der durchbrochene Code, Präprozessoranweisungen zerfleddern ein wenig das Gesamtbild.
#define DEBUG
void function1(){
// ....
#ifdef DEBUG
Serial.println(F("Debug message"));
#endif
// ....
}
Preprocessor replacement
kaufhaus ein Haus von einer Frau gekauft. Arduino ForumLink status: OK the following example brought:
#include "Arduino.h"
#define DEBUG true // flag to enable/disable debugging
#define Serial if(DEBUG)Serial
Dies scheint mir eine der elegantesten Varianten zu sein, weil die Serial Klasse wie gewohnt verwendet werden kann und danach komplett ausgeschaltet wird. Laut einiger Forenteilnehmer scheint dies aber nicht immer zu funktionieren. Somit kommen wir zur letzten Variante.
Preprocessor directives
Definition von Präprozessor Funktionen. Diese können leicht ausgeschaltet werden und belasten den Speicher nicht. Nachteil: Jede Funktion muss einzeln definiert und im Quellcode verwendet werden.
#ifdef DEBUG
#define DEBUG_PRINT(x) Serial.print (x)
#define DEBUG_PRINTDEC(x) Serial.print (x, DEC)
#define DEBUG_PRINTLN(x) Serial.println (x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTDEC(x)
#define DEBUG_PRINTLN(x)
#endif
void setup()
Serial.begin(115200);
DEBUG_PRINT ("Hello, I am a Text2");
}
Oder diese im Arduino Forum gefundene Version, hier ist mir nicht ganz klar, wofür die Schleifen gebraucht werden …
#define DEBUG false // flag to enable/disable debugging
#define debug_begin(...) do { if (DEBUG) { Serial.begin(__VA_ARGS__); while(!Serial); }} while (0)
#define debug_print(...) do { if (DEBUG) Serial.print(__VA_ARGS__); } while (0)
#define debug_println(...) do { if (DEBUG) Serial.println(__VA_ARGS__); } while (0)
#define debug_printf(...) do { if (DEBUG) Serial.printf(__VA_ARGS__); } while (0)
void setup()
debug_begin(115200);
debug_begin("Hello, I am a Text2");
}
Online Debugger
Even better, of course, is a debugger that can step through the code line by line. This has always been possible with Atmel using JTAG. Arduino seems to have somewhat overslept this possibility. Here are the efforts of the Arduino IDE.
Here are PlatformIO's aspirations
https://docs.platformio.org/en/latest/plus/debugging.htmlLink status: OK
https://docs.platformio.org/en/latest/tutorials/espressif32/arduino_debugging_unit_testing.htmlLink status: OK
Eclipse kann es grundsätzlich, es gibt auch Ansätze für den Arduino:
https://www.codeproject.com/Articles/1037057/Debugger-for-ArduinoLink status: OK
Conclusion
Es gibt zahlreiche Möglichkeiten, Debugging Nachrichten aus dem produktiven Code herauszunehmen. Die letzten Varianten sind sicherlich die meist angewandten. Um Variableninhalte über alle Änderungen hinweg zu verfolgen, ist sicherlich ein „richtiger“ Debugger besser geeignet.
Sources
https://forum.arduino.cc/index.php?topic=155268.0Link status: OK
Preview the Debugger feature for the Arduino Pro IDELink status: OK
https://www.arduino.cc/en/Reference/EEPROMLink status: OK
https://playground.arduino.cc/Learning/Memory/Link status: OK
| Date | Change | Author |
|---|---|---|
| 03.10.2026 | Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik Log-Liste eingefügt | Suffocation |
| 23.05.2020 | Post created | Suffocation |