tl; dr
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
細部
Appleには技術的なQ&Aページがあります:QA1669-現在のメソッドや行番号などのコンテキスト情報をロギングステートメントに追加するにはどうすればよいですか?
ロギングを支援するには:
- Cプリプロセッサはいくつかのマクロを提供します。
- Objective-Cは式(メソッド)を提供します。
- 現在のメソッドのセレクターに暗黙の引数を渡します。
_cmd
他の答えが示すように、単に現在のメソッドの名前を取得するには、次を呼び出します。
NSStringFromSelector(_cmd)
現在のメソッド名と現在の行番号を取得するには、次の2つのマクロ__func__
を使用し__LINE__
ます。
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);
別の例... Xcodeのコードスニペットライブラリに保持しているコードのスニペット:
NSLog( @"ERROR %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
…そしてエラーの代わりにトレース…
NSLog( @"TRACE %@ METHOD %s:%d ", @"DescriptionGoesHere", __func__, __LINE__ );
…そして値を渡すソフトコーディングされた記述を使用するより長いもの([rows count]
)…
NSLog( @"TRACE %@ METHOD %s:%d.", [NSString stringWithFormat:@"'Table of Contents.txt' file's count of Linefeed-delimited rows: %u.", [rows count]] , __func__, __LINE__ );
ロギング用のプリプロセッサマクロ
マクロの両側でアンダースコア文字のペアを使用していることに注意してください。
| マクロ| フォーマット| 説明
__func__%s現在の関数シグネチャ
__LINE__%d現在の行番号
__FILE__%sソースファイルへのフルパス
__PRETTY_FUNCTION__%s __func__に似ていますが、詳細が含まれます
C ++コードの型情報。
ロギングの式
| 式| フォーマット| 説明
NSStringFromSelector(_cmd)%@現在のセレクターの名前
NSStringFromClass([self class])%@現在のオブジェクトのクラス名
[[NSString%@ソースコードファイル名
stringWithUTF8String:__ FILE__]
lastPathComponent]
[NSThread callStackSymbols]%@スタックトレースのNSArray
ロギングフレームワーク
一部のロギングフレームワークは、現在のメソッドまたは行番号の取得にも役立ちます。私はJava(SLF4J + LogBack)で優れたロギングフレームワークを使用しましたが、Cocoaでは使用しなかったため、わかりません。
さまざまなCocoaロギングフレームワークへのリンクについては、この質問を参照してください。
セレクターの名前
セレクター変数(SEL)がある場合、このコーデック ブログの投稿で説明されているように、2つの方法のいずれかでそのメソッド名(「メッセージ」)を出力できます。
- NSStringFromSelectorへのObjective-C呼び出しの使用:
NSLog(@"%@", NSStringFromSelector(selector) );
- ストレートCを使用:
NSLog(@"%s", selector );
この情報は、2013年7月19日現在のリンクされたAppleのドキュメントページから取得されました。そのページは最後に更新されました2011-10-04。
iPhone
プロジェクトでは、実際にこれを手動で行いました。これに対する答えを見たいです。