如何在.bundle文件中模拟objdump --dwarf = decodingline?

时间:2012-04-08 05:08:25

标签: c macos gdb dwarf

我已成功使用objdump --dwarf=decodedline在Linux上的.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工作所需的信息。

1 个答案:

答案 0 :(得分:1)

事实证明,一种方法是使用Apple的nm -pa *.bundle来查找给定偏移的符号名称和原始目标文件。

完成后,您可以先使用objdump -tT查找原始目标文件中符号名称的偏移量;然后像以前一样使用objdump --dwarf=decodedline

每个步骤都需要一些简单的输出解析,但它似乎确实有效。如果有更强大的方法,我会感兴趣。