Как получить переменные, передаваемые в функцию с помощью макросов (цель c)

Кто-нибудь знает, как динамически получить все значения переменных, передаваемых в функцию для ведения журнала?

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

Я пытался

#define NFDebug( s, ... ) NSLog( @"DEBUG: %s: %@", __PRETTY_FUNCTION__, \
[NSString stringWithFormat:(@"%@"), ##__VA_ARGS__] )

, который дает все, НО значения переменных

1 ответ

Решение

Я использую что-то вроде этого:

#ifdef YOUR_DEBUG_ENABLER_SYMBOL_ONLY_SET_IN_DEBUG_BUILDS
#define DEBUG_ONLY(_code_) _code_
#else
#define DEBUG_ONLY(_code_)
#endif

#define DebugLog(_str, ...) DEBUG_ONLY(NSLog(@"%s: " _str, __func__, ## __VA_ARGS__))

Обратите внимание, что перед _str в NSLog нет запятой - это означает, что строка, которую вы используете в вызывающем коде, добавляется (компилятором) в строку "%s: ", чтобы стать строкой составного формата для NSLog. Все параметры, которые вы хотите распечатать, могут быть включены в передаваемую в формате строку. % S применяется к _ _ func _ _, а ваш _str применяется к остальным переданным переменным:

float f;
int i;
NSString* s;
// Initialise f, i, and s to something
...
// Log the values only when in debug mode, with function name auto-prepended
DebugLog(@"float is: %f - int is: %d - string is: %@", f, i, s);

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

Другие вопросы по тегам