2012-04-19 8 views
3

パフォーマンスの低下がそれを排除しない場所でのログ記録のために、ブレークポイントを使用する場所全体にNSLoggingから移動したいと考えています。Xcode 4.3ブレークポイントのロギングオブジェクトの説明

は、私はちょうどpoデバッガコマンドアクションを持つオブジェクト、そして私は、私はちょうどログメッセージアクションをchoosignことにより、任意の文字列をログに記録することができます知っていることができます知っています。

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

私は間違っていますか?

答えて

2

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

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

デバッガで作業するときは、常に戻り値の型をキャストする必要があります。 GDBとLLDBの両方。

パフォーマンスヒットを避けるためにブレークポイントを使用することをお勧めしますが、これはログがデバッガに接続されている場合にのみ印刷されることを意味します。 NSLogsは出力をシステムログにバッファリングしますが、Xcodeのオーガナイザ(デバイス)から見ることができます。

+0

ありがとう、これは実行可能なソリューションのように聞こえます(ただし、Loggingアクションに何が起こったかは直接*回答しません)。実際、私の経験では、ブレークポイントのロギングはNSLogを使用するよりもはるかに低速ですが、時には私のソース全体にNSLogをスプレーしたくありません。 – fzwo

+0

おそらく、私が答える以上のものがありますか?私はあなたのポストに置いた表現の結果がポインタになることを期待しています。投稿したコードは、同じ目標を達成するのに役立ちますか?それを達成するための別の方法を探していますか? – Sam

+0

私はあなたに賞金を授与しました。なぜなら、私がブレークポイントロギングで実践した問題を修正しているからです。私は私の質問の式は文字列へのポインタだけでなく、文字列を出力すると思った。 – fzwo

1

(編集:私は質問のポイントを逃したし、それが答えではないのです)

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

単に

DebugLog(@"Hello, World!"); 

NSLog(@"Hello, World!"); 

を交換し、代わりに

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

のあなたは得られます。

BetterDictionary.m:737 Hello, World! 

は無限に、より興味深いものです

(それはそれをログインしたラインも、どのファイルとを示しています)。 undefine生産ビルド用のDEBUGとDebugLogは、にはすべてとは呼ばれません。

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

+1

提案していただきありがとうございますが、実際には私の質問には答えません。 – fzwo

+4

@fzwoはい、私は質問のポイントを完全に逃したと答えた直後に理解し、あなたがコメントしたことを削除しようとしていた...私はここにそれを残すでしょう。それ。 –