2016-02-18 77 views
0

我的最终目标是修改LLDB中的Objective-C程序的symfile。我想扩充方法名称,以便可以使用新的唯一名称来引用调试符号文件中的现有方法。为调试符号创建LLDB别名

例如,如果使用(lldb) b -[Foo bar]这种方法当然休息的命名-[Foo bar]的方法,我可以,不过,我想创建这种方法命名为-[Foo baz]“别名”,所以当我执行在LLDB以下:

method_getImplementation(class_getInstanceMethod([Foo class], @selector(bar)))

我目前的方法:

(lldb) b -[Foo baz]

断点将在地址在获取设置解决的,这是使用dsymutil功能转储symfile:

dsymutil /path/to/executable -o dump.dYSM

从那里,我可以使用dwarfdump命令美化输出到的东西其实我可以编辑。

dwarfdump dump.dYSM/Contents/Resources/DWARF/ExecName

现在,我可以很容易地编辑AT_name属性包含-[Foo bar]

不过,我不知道如何重新生成dYSM后,我在这“美化”格式的调试信息。

提供,我可以重新编辑的dYSM,我希望能坚持下去回LLDB使用两种:

(lldb) target modules add(lldb) target symbol add

所以我的问题是:

  1. 有没有更好的该怎么办?请注意,我没有源文件和目标文件来重新生成新的dYSM。
  2. 是否有一个Terminal命令可以将我编辑过的dwarfdump修补到LLDB可读的调试符号文件中?

干杯!

回答

1

我不完全清楚你想达到什么。这听起来首先就像你试图在动态确定的一些类/选择对实现突破,在这种情况下,你可以这样做:

(lldb) break set -a `(void *) method_getImplementation((void *)class_getInstanceMethod([Foo class], @selector(bar)))` 

注意,你必须在你已经做到这一点运行你的程序并且创建一个断点,但是直到你运行之前,你都不会知道将要调用的具体实现,所以这不是什么限制。

但只是在DWARF中删除名称实际上并未达到此效果。所以也许如果你多说一点你的实际目标,我们可以提供更多的帮助。

至于问题2,事实之后没有工具可以编辑dSYM DWARF内容。这并不是什么大事。