【问题标题】:How do I emulate objdump --dwarf=decodedline in .bundle files?如何在 .bundle 文件中模拟 objdump --dwarf=decodedline?
【发布时间】:2012-04-08 05:08:24
【问题描述】:

我已经成功地使用objdump --dwarf=decodedline 在Linux 上的.so 文件中找到每个偏移量的源位置。

不幸的是,在 Mac-OS X 上。.bundle 文件(用作共享库)似乎无法以这种方式查询。

我很乐观,因为gdb 能够正确调试和单步调试这些包中的代码——有人知道它在做什么吗?

更多信息:

dwarfdump 实用程序声称 .bundle 文件不包含 DWARF 数据,但它确实包含 STABS 数据;但是objdump --stabs 也找不到任何 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 工作所需的信息。

【问题讨论】:

    标签: c macos gdb dwarf


    【解决方案1】:

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

    一旦你有了,你可以先用objdump -tT在原始目标文件中找到符号名的偏移量;然后像以前一样使用objdump --dwarf=decodedline

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

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2014-04-27
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多