Как получить переменные, передаваемые в функцию с помощью макросов (цель c) - PullRequest
2 голосов
/ 25 сентября 2010

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

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

Я пытался

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

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

1 Ответ

1 голос
/ 03 октября 2010

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

#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);

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

...