Ich glaube, Atmel Studio unterscheidet in der Tat zwischen "Release"
und "Debug", weil sie das von der Microsoft-Umgebung so geerbt haben.
Ob sie davon abhängig auch ein #define setzen, weiß ich nicht.
Nur: letzten Endes wird man früher oder später immer mal gezwungen
sein, exakt das fertige Programm zu debuggen, und nicht eins, was
sich irgendwie davon dann doch wieder unterscheidet. Spätestens
am Tag X, an dem entweder die Debug-Version gar nicht mehr in den
Flash passt, oder aber die Debug-Version im Prinzip läuft (nur zu
viele Ressourcen verbraucht), die Release-Version beim Kunden aber
doch bloß nicht.
Von der Warte her bin ich immer ganz vorsichtig mit solchen separaten
Debug-Builds, und debugge lieber gleich die Version, die dann später
auch produktiv werden soll.
Eine weitere Möglichkeit, in der Firmware zu entscheiden, ob man
das JTAG abklemmen soll oder nicht wäre es, wenn man noch einen freien
Pin als Eingang übrig hat: den Pull-up dafür konfigurieren, und zum
Debuggen dann den Pin auf low ziehen. Bevor die Firmware das JTD
setzt, prüft sie, ob der Eingang auf low steht oder nicht.