我已成功使用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
工作所需的信息。
答案 0 :(得分:1)
事实证明,一种方法是使用Apple的nm -pa *.bundle
来查找给定偏移的符号名称和原始目标文件。
完成后,您可以先使用objdump -tT
查找原始目标文件中符号名称的偏移量;然后像以前一样使用objdump --dwarf=decodedline
。
每个步骤都需要一些简单的输出解析,但它似乎确实有效。如果有更强大的方法,我会感兴趣。