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

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

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

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

于 2012-04-09T00:28:46.007 回答