Deboggage, pas à pas et évaluation de variable

Salut.
L'AtMega328 dispose du debugWire, qui permet le debug à l'aide d'un boîtier Atmel-lCE par exemple.
En 30 ans de carrière je n'ai eu recours à un debugger qu'à de rares occasions, tout simplement car quand je développe du logiciel je préfère utiliser des traces logicielles, Serial.print() dans le monde ARDUINO, qui permettent de suivre en temps (pratiquement) réel le déroulement du logiciel.
Les traces logicielles alourdissent le code et le ralentissent, mais on peut facilement les activer / désactiver à l'aide de quelques macros :

#define LOGS_ACTIVE

#ifdef LOGS_ACTIVE
#define log_print       Serial.print
#define log_println     Serial.println
#else
#define log_print
#define log_println
#endif

void setup()
{
  Serial.begin(115200);
  log_println("***** BOOT *****");
}

void loop()
{
}

Dans cet exemple il te suffit de commenter la ligne pour désactiver les traces :

//#define LOGS_ACTIVE

Je pense que les traces logicielles sont le meilleur moyen de juger du bon déroulement d'un logiciel. Un debugger n'est utile que si tu cherches à déboguer des portions de code critiques, interruptions pas exemple, où les traces logicielles sont inutilisables.