Custom Debug printf Используется во время выполнения - PullRequest
0 голосов
/ 22 ноября 2010

Некоторое время я использовал для отладки что-то вроде следующего:

#ifdef DEBUG
#       define Log(fmt, ...) printf(("[%s:%d] %s: " fmt "\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);
#else
#       define Log(...)
#endif

Это прекрасно работает, так что когда я компилирую что-то вроде g++ -DDEBUG=1, я получаю все ожидаемые отпечатки.

Мой вопрос (или проблема) состоит в том, чтобы придумать способ, которым эта отладка может происходить с помощью команды времени выполнения вместо времени сборки (например, ./myprocess -d), не усложняя (или не меняя вообще) сторону клиентакод.

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Вы должны объявить абстрактный класс Logger и создать соответствующую реализацию (которая является дочерней по отношению к Logger) во время выполнения.

2 голосов
/ 22 ноября 2010

Почему бы не принять это просто?

extern boolean GLOBAL_LOGGING_ENABLED = false; // you'll need a single definition in any .cpp
#define LOG(fmt, ...) if (GLOBAL_LOGGING_ENABLED) {printf( // etc etc

// at startup read command line and set the flag to true if asked for

Или что-нибудь аналогичное.

...