Objective-C - 使用GDB打印方法参数

ryy*_*yst 2 gdb objective-c

我正在努力用GDB调试我的Objective-C程序.我有一个- (NSString *)reverse:(NSString *)someString我想调试的功能.

这是我设置断点的方法:

(gdb) break -[MyClass reverse:]
Run Code Online (Sandbox Code Playgroud)

现在,当代码到达断点时,如何打印地址甚至更好的值self和方法参数?我已经做了一些谷歌搜索,并找到了一些建议,po $rdx但我找不到任何建议.

我怎么解决这个问题?

Rob*_*ier 11

克拉克考克斯写了我所见过的最好的解释.我一直都会参考这个页面并制作了一份本地副本,以防万一它消失.

http://www.clarkcox.com/blog/2009/02/04/inspecting-obj-c-parameters-in-gdb/

x86_64和非浮点参数的快速版本是:

first ObjC arg => $rdx
second ObjC arg => $rcx
third ObjC arg => $r8
fourth ObjC arg => $r9
Run Code Online (Sandbox Code Playgroud)

记住,传递给方法的前两个东西(在$ rdi和$ rsi中)是self_cmd.我不算这些.

如果你传递浮点,结构或超过四个参数,事情变得更复杂,你应该阅读AMD64 ABI第3.2.3节中的调用约定.如果您正在处理i386,PPC或ARM,请参阅Clark的帖子,该帖子适用于常见案例.