printf()を使用してデバッグしない大きな理由は、通常、非効率的で、不十分で、不要なためです。
非効率:printf()とkinは、小さなマイクロコントローラーで利用可能なものと比較して、多くのフラッシュとRAMを使用しますが、実際のデバッグでは大きな非効率があります。ログに記録される内容を変更するには、ターゲットを再コンパイルおよび再プログラミングする必要があり、プロセスが遅くなります。また、有用な作業を行うために使用できるUARTを使い果たします。
不十分:シリアルリンクを介して出力できる詳細はあまりありません。プログラムがハングした場合、正確な場所はわからず、完了した最後の出力だけがわかります。
不要:多くのマイクロコントローラーをリモートでデバッグできます。JTAGまたは独自のプロトコルを使用して、プロセッサを一時停止したり、レジスタやRAMを覗いたり、再コンパイルすることなく実行中のプロセッサの状態を変更することもできます。これが、多くのスペースとパワーを備えたPC上であっても、一般にデバッガーがprintステートメントよりもデバッグに適している理由です。
初心者向けの最も一般的なマイクロコントローラプラットフォームであるArduinoにデバッガがないのは残念です。AVRはリモートデバッグをサポートしていますが、AtmelのdebugWIREプロトコルは独自仕様であり、文書化されていません。公式の開発ボードを使用してGDBでデバッグできますが、それがあれば、おそらくArduinoについてはあまり心配していません。