2

ロギングのために関数に渡されるすべての変数値を動的に取得する方法を知っている人はいますか?

関数をログに記録できる簡単な方法(コンパイラマクロを使用するなど)と、それに渡される変数値(ログファイルに書き込まれるため、関数の原因となる入力を簡単に見つけることができます)を探しています。クラッシュ)

私は試してきました

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

、すべてを提供しますが、変数の値

4

1 に答える 1

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

これには、デバッグ時に条件付きで、出力に関数名を自動的に追加して、必要なテキストと変数をログに記録できるという利点があります。

于 2010-10-03T16:40:09.297 に答える