如何使用宏将变量传递给函数(目标c)

时间:2010-09-25 04:22:16

标签: objective-c logging macros nslog

有人知道如何为了记录而动态获取传递给函数的所有变量值吗?

我正在寻找一种简单的方法(比如使用编译器宏)来记录函数,以及传递给它的变量值(然后将其写入日志文件,以便我们可以轻松找到输入导致功能崩溃)

我一直在尝试

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

,它提供了一切,但变量值

1 个答案:

答案 0 :(得分: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__))

请注意,NSLog中的_str之前没有逗号 - 这意味着您在调用代码中使用的字符串被(由编译器)附加到“%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);

这样做的好处是,您可以在调试时有条件地记录所需的任何文本和变量,并自动将函数名称添加到输出中。