Как реализовать уровневую систему отладки? - PullRequest
3 голосов
/ 02 февраля 2010

по своему замыслу, в среде, в которой я сейчас работаю, я не могу использовать отладчик, чтобы попытаться обнаружить ошибки, поэтому почти всегда, когда мне нужно отладить функциональность, я получаю некоторую информацию.

Для этого я сделал следующее:

#ifdef DEBUG
    #define printd(x) printf x
#else
    #define printd(x)
#endif

Поэтому, когда мне нужно напечатать некоторую отладочную информацию, я использую printd() вместо printf().

Проблема, которую я обнаружил, заключается в том, что мне нужна выровненная система, есть сообщения, которые могут быть важны на определенном уровне отладки, но не важны при отладке других частей кода.

Итак, мой вопрос, как я могу реализовать уровневую систему отладки? Я ценю простоту, я имею в виду, я предпочитаю свою настоящую систему, чем необходимость большого количества кода или запутанного кода при его использовании. Что-то вроде printd(level, format, ...) было бы замечательно.

Ответы [ 3 ]

7 голосов
/ 02 февраля 2010

Конечно, есть более элегантные способы сделать это, конечно, но это прекрасно работает

#ifdef DEBUG
 extern int g_debuglevel;
 #define printd(level, x) (level <= g_debuglevel) ? 0 : printf x
#else
 #define printd(level, x)
#endif

Хотя лично я предпочитаю это

#ifdef DEBUG
 extern void printdf(level, fmt, ...);
 #define printd printfd
#else
 #define printd
#endif

, где printdf - это функция, которая проверяет уровень и затем вызывает vprintf, передавая fmt и va_args.

1 голос
/ 03 февраля 2010

Если вы хотите пойти на дополнительный шаг и записать свои отладочные операторы уровня, вы можете попробовать log4c.http://log4c.sourceforge.net/

в функции printfd, описанной выше, вы также можете проверить переменную среды, скажем, DEBUG_LOG_LEVEL, чтобы динамически включать и выключать ведение журнала.

Я использовал аналогичную технику для реализации облегченногоуровневая библиотека журналов для встроенной среды linux.

Также для примера log4c - http://log4c.sourcearchive.com/documentation/1.2.1/helloworld_8c-source.html Благодаря поиску Google:)

1 голос
/ 02 февраля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...