Немного офф.
А почему через stream? Я понимаю - с++, сам на нём пишу, но мне кажется, что printf куда гибче.
Я делаю так:
Есть глобальная функция:
Код
void debugPrintf( char *arg_list, ...);
Есть файл конфигурации проекта в котором написано:
Код
#ifndef RELEASE
#define USE_DEBUG(...) debugPrintf(__VA_ARGS__)
#define USE_DEBUG_IAP(...) debugPrintf(__VA_ARGS__)
#endif
После этого в каждом файле где нужна отладка:
Код
#ifndef USE_DEBUG_IAP
#define USE_DEBUG_IAP(...)
#else
extern void debugPrintf( char *arg_list, ...);
#endif
Потом в коде:
Код
if ( iap(FLASH_READ_BOOT_CODE_VERSION, 0, 0, 0, 0) ) USE_DEBUG_IAP("Error reading boot code version\n");
else USE_DEBUG_IAP("Boot code version: %d.%d\n", (uint8_t) (iap_res[1]>>8), (uint8_t) iap_res[1]);
И всё. Дебаг включается/выключается автоматически по опциям. Одна строчка в коде, никаких #ifdef кроме как в начале.
Вывод всего чего угодно.