2012-06-20 9 views
6

私は最近、iOSアプリのクラッシュログを象徴することに問題を抱えています。何らかの理由でdSYMのUUIDがSpotlightでインデックスに登録されていませんでした。いくつかの手作業による検索と健全なコマンドラインの呪文の後、私はクラッシュログを部分的に象徴することができました。C++コードを象徴することは可能ですか?

最初はdSYMが不完全かもしれないと思ったのですが、欠落しているメソッドがC++コードで発生していたということがわかりました。このプロジェクトはC++ライブラリを呼び出すObjective-CアプリケーションですObjective-C++コードを使用してObjective-Cコードにコールバックします。私が逃しているコールは、具体的には、C++の土地で起こるものです。

私の質問は:記号処理プロセスがC++コードの関数呼び出しを解決できる方法はありますか?ある特別なオプションは必要ですか?

+0

単にアドレスを残すか、_ZN7 ...のようなものを与えますか? – C0deH4cker

+0

ではありません。 14のMyApp \t 0x001001bc 0xfe000 + 8636 15のMyAppのアプリlldb' \t 0x00100174 0xfe000 + 8564 –

+0

あなたであれば、 '、あなたがC++名前のいずれかの方法を分解することができます:それは、ベースアドレスとオフセットですか?静的ライブラリバイナリを持っているか、プロジェクトのすべてをコンパイルしていますか? – nielsbot

答えて

0

apple sdkに付随する有用なプログラムの1つは、atos(住所とシンボル)です。基本的には次のようにしてください:

atos -o myExecutable -arch armv7 0x(address here) 

そのアドレスにシンボル名が表示されます。

+0

これはObjCで動作します。 C++については、 0x00261588(MyApp内)+ 465932 –

+0

gdbでこれを行う方法を教えてください... – C0deH4cker

+0

ありがとうございますが、LLVMを使用していますが、 –

0

私はObjective-Cに精通していませんが、C++コードがシンボルでコンパイルされていることを確認したいと思います。特に、C++コードをコンパイルするときに、-rdynamicや-gを必ず含めましたか?

+0

これらはgccのフラグのようです。あなたはLLVMで同じことを達成する方法を知っていますか? –

+1

AppleはgccとclangのバックエンドとしてLLVMを使います。 clangは基本的にgccと同じフラグをとります。すべてのコードがデバッグレベルを3に設定してコンパイルされていることを確認してください。 '-g3'を使用してください。最適化を無効にすることもできます( '-O0')。 – sfstewman

+0

@sfstewman最適化レベルは何もしていません.AFIK-クラッシュ後のシンボル化で、むしろ剥ぎ取るでしょう。 clangには '-g3'がなく、' -g'だけはありません –

0

は、あなたが手動で各アドレスを調べる(またはこれを実行するスクリプトを作成)する必要がありますが、シンボルがOKであれば(自分のdSymファイルが大きいです

dwarfdump --lookup = 0xYOUR_ADRESS YOUR_DSYM_FILE

を試してみてください20MBと言うよりも)これは仕事をするでしょう。

関連する問題