1

Linux 上objdump --dwarf=decodedlineのファイル内の各オフセットのソースの場所を見つけるために使用してきました。.so

残念ながら Mac-OS X では、.bundle(共有ライブラリとして使用される) ファイルはこの方法ではクエリできないようです。

これらのバンドル内のコードを正しくデバッグしてステップスルーできるので、私にできることがあると楽観的ですgdb— 誰かがそれが何をしているのか知っていますか?

さらに詳しい情報:

このdwarfdumpユーティリティは、.bundle ファイルに DWARF データは含まれていないが、STABS データは含まれていると主張しています。ただしobjdump --stabs、スタブデータも見つかりません。

(質問への回答が簡単になる場合は、実際にはすべてのオフセットは必要ありません。特定のオフセットのソースの場所を照会できれば十分です)。

これをテストしてきたバンドル ファイルは、次を使用して生成されました。

cc -dynamic -bundle -undefined suppress -flat_namespace -g -o c_location.bundle c_location.o -L. -L/Users/User/.rvm/rubies/ruby-1.8.7-p357/lib -L.     -lruby  -ldl -lobjc

元の c_location.o ファイルには、 が機能するために必要な情報が含まれていますobjdump --dwarf=decodedline

4

1 に答える 1

1

したがって、これを行う 1 つの方法は、Apple を使用nm -pa *.bundleして、指定されたオフセットのシンボル名と元のオブジェクト ファイルを見つけることです。

それができたら、まずobjdump -tT、元のオブジェクト ファイル内のシンボル名のオフセットを見つけるために使用できます。その後はobjdump --dwarf=decodedline以前と同じように使用します。

各ステップでは、出力の解析を少し単純化する必要がありますが、うまくいくようです™。より堅牢なアプローチがあれば興味があります。

于 2012-04-09T00:28:46.007 に答える