[iPhone開発]iOSでのログ印刷Q&A


Q:現在の関数と行番号の印刷方法
A:印刷時に印刷パラメータとしてプリコーディングマクロを使用して、現在の関数と行番号を印刷できます.次のようになります.
1 NSLog ( @"%s:%d obj=%@" , __func__, __LINE__, obj );
そのうち_func__および_LINE__いずれもプリコンパイルされたマクロで、コンパイル時に現在の関数と現在の行番号に置き換えられます.次に、ログの印刷によく使用されるマクロを示します.
マクロ#マクロ#
説明
__func__
現在の関数またはメソッド、c文字列の印刷
__LINE__
現在の行番号、整数を印刷
__FILE__
現在のファイルパス、c文字列の印刷
__PRETTY_FUNCTION__
現在の関数またはメソッドの印刷(C++にパラメータタイプが含まれます)、c文字列
Q:クラス名、メッセージ名、現在のスタック情報をどのように印刷しますか?
A:以下の方法で、実行時にこれらの情報を動的に取得できます.
コード#コード#
説明
NSStringFromSelector(SEL)
selectorの名前を取得
NSStringFromSelector(_cmd)
現在のメソッド名の取得
NSStringFromClass([object class])
objectのクラス名の取得
[NSThread callStackSymbols]
現在のスレッドを取得するスタックは、スタック内のすべての関数名を含むNSArryです.
Q:ログをファイルに印刷する方法
A:freopen関数を使用して、標準出力と標準エラーファイルをリダイレクトできます.printf関数は標準出力(stdout)に印刷され、NSLog関数は標準エラー(stderr)に印刷されます.標準出力(stdout)と標準エラー(stderr)をファイルに再配向すると、ログがファイルに印刷されます.
1
2 freopen ( "/tmp/log.txt" , "a+" , stdout ); freopen ( "/tmp/log.txt" , "a+" , stderr );