2011-01-09 17 views
4

私は最近、Googleに問題の解決策がなかったという問題に直面しました。私はコンソールまたはファイルにアプリケーションのObjective-Cメッセージを記録したいと思います。私はアプリケーションを書いていないので、ログを再コンパイルするためのソースコードは含まれていません。私はjailbroken iPhoneを持っているので、これを実現する方法に制限はありません。私はMobileSubstrateエクステンション(これはobjc_msgSendをいくつかのロギングを行うアプリケーションにフックしてもよいですか?これで私を助けてもらえますか?iPhoneでobjc_msgSend()をログに記録

+0

あなたは文句を言わないメソッド名を取得ログインするとき。あなたはポインタだけを得るでしょう。メソッド名は最後のバイナリには格納されません。別のファイル(.dSYM)に保存されます – mackross

+3

メソッドセレクタはバイナリに格納されます。 Objective-cはそれらなしでは動作しません。 objc_msgSendの2番目の引数はセレクタで、これは文字列に変更できます。 – ughoavgfhw

+0

ughoavgfhwは正しいです(Objective-Cソースからldによって生成されたバイナリをオープンしようとしたことがありますか?)これは良いことですが、objc_msgSendを使ってログを作成する方法は? –

答えて

5

ObjCメッセージのロギングメカニズムはありますが、シンボルファイルなしでメソッド名を取得するかどうかはわかりません。あなたのジェイルブレイク携帯電話は、デバッガ(GDB)の制御下で任意のアプリケーションを実行することができます、あなたがアプリを起動することができるはず、初期化時に早期にブレークポイントを設定すると仮定すると、次の操作を行います。

(gdb) call (void)instrumentObjcMessageSends(YES) 

は、ログファイルはtmpフォルダ内のテキストファイルに書き込まれます。ここでは詳細:

http://www.dribin.org/dave/blog/archives/2006/04/22/tracing_objc/

+0

Cbranchありがとう、本当に助けてくれました。私はこれを試してみる。 (oops、もう1つ質問:私はどのようにブレークポイントを設定するのですか?) –

+0

まあ、私はこれを試しましたが、int/tmpファイルがありませんでした。 –

+0

はシミュレータを試しましたか?私のためにそこで働いた。 – Kaiserludi

関連する問題