2017-01-17 10 views
12

別のマシンでコンパイルされたiOSアプリケーションにdylibのフレームワークがあります。 私は私のマシン上でソースをチェックアウトして使用してソースコードのパスをマップするlldbを指示してみました:Xcodeのバイナリdylibにソースを添付する

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix 

を無駄に、まだアセンブリを見て。

注1:dylibは、Xcodeの同じバージョンのC++コードからコンパイルされています。

注2:nm -pa /path/to/dylibを使用して、ファイルパスがデバッグ情報に埋め込まれているかどうかを判断しました。何らかの理由でlldbが再生されません。 https://medium.com/@maxraskin/background-1b4b6a9c65be

答えて

4
:私は以下のジム・インガムの答えを踏襲し、これを自動化するスクリプトを作成しました

おかげ

UPDATEは、スクリプトは、私が書いたこの記事の要旨リンクとして提供されています

あるマシン上でビルドされたコードを別のマシンでデバッグするには、dSYMをビルドし、デバッグ対象のマシンで使用可能にする必要があります。あなたがそれをしていないなら、何も動かないでしょう。

次に確認するのは、lldbがdSYMを取得していることです。このページには、このプロセスがどのように動作するかのいくつかの説明があります。

http://lldb.llvm.org/symbols.html

をそれ以外のすべてが失敗した場合、あなたは手でそれを追加するadd-dsymコマンドを使用することができます。

それはまだあなたの問題を解決していない場合は、お使いのdylibにいくつかのシンボルを選択し、実行します。

(lldb) image lookup -vn <SYMBOL_NAME> 

または交互にロードされたdylibでいくつかのアドレスを検索し、実行します。

(lldb) image lookup -va <ADDRESS> 

lldbがdSYMを検出し、デバッグ情報が正しい場合、出力行の1つは「コンパイル単位」のエントリになります。これは、デバッグ情報がソースファイルへのパスであると言うことです。そのパスの適切な基盤は、target.source-mapで使うべきものです。そのエントリが表示されない場合、そのコンパイルユニットのデバッグ情報は何とか失われています。

これらのすべてがうまく見えて、lldbがまだソースファイルを表示していない場合は、バグが発生する可能性があります。その場合はhttp://bugreporter.apple.comでバグを報告してください。

+0

詳しい返信をいただき、ありがとうございました。私は本当にdSYMが不足していました。私は 'add-dsym'を使用してdSYMパスを指摘した後、' image lookup -vn 'を使ってシンボルソースコードパスを取得し、' settings set target.source-map/path/prefix/i/got/from/lookup/path/prefix/on/my/machine'と入力します。 –

+0

これを自動化するために、http://lldb.llvm.org/symbols.htmlの指示を使用します。 –

+0

btw - dylibのデバッグビルドで、dSYMが必要ですか、またはdwarfファイル内に埋め込まれた同じデータですか? –

関連する問題