3

いたるところにあるNSLロギングから、パフォーマンスの低下によって妨げられないロギングにブレークポイントを使用するように移行したいと思います。

デバッガコマンドpoアクションを使用してオブジェクトをログに記録できることはわかっています。また、メッセージのログアクションを選択して任意の文字列をログに記録できることもわかっています。

そして、ログメッセージを選択して。のようなものを入力することで、両方を組み合わせることができるはずだと思いますSomeText giving context for object description: @(const char *)[[anObject description] UTF8String]@。残念ながら、これは機能していないようで、説明文字列へのポインタであると私が想定しているものを常に提供してくれます。

私は何が間違っているのですか?

4

2 に答える 2

2

ちょっとトリッキーですが、これでうまくいくと思います。ブレークポイントアクションをデバッガコマンドとして設定します。次に、このテキストをアクションとして使用します。

po (NSString *) [@"Some text describing: " stringByAppendingString:(NSString *)[anObject description]]

デバッガーで作業するときは、リターン型をキャストするように常に注意する必要があります。GDBとLLDBの両方。

パフォーマンスの低下を回避するためにブレークポイントを使用するというあなたのアイデアは気に入っていますが、これは、ログがデバッガーに接続されている場合にのみ印刷されることも意味します。NSLogsは出力をシステムログにバッファリングしますが、Xcodeのオーガナイザー(デバイス)から表示できます。

于 2012-05-03T17:41:27.907 に答える
1

(編集:私は質問のポイントを逃しました、そしてそれは答えではありません)

を使用するのが最善だと思いますDebugLog。これはマクロであり、簡単に無効にすることができます(デバッグビルドでdef-ineDEBUGを実行するとオンになり、そうでない場合はオフになりますdefine)。したがって、パフォーマンスの低下はありません(まったく逆です)。

単に交換する

NSLog(@"Hello, World!");

DebugLog(@"Hello, World!");

そして代わりに

19/4/12 8:55:52.949 PM Dictionary: Hello, World!

あなたが得るでしょう:

BetterDictionary.m:737 Hello, World!

(どのファイル、さらにはどの行がそれをログに記録したかを示します)

これは無限に興味深いものです。undefine本番ビルドのデバッグを行い、まったく呼び出されDebugLogません。

そして、忘れないでください#import 'DebugLog.h'

于 2012-04-19T16:28:38.327 に答える