我正在努力使用 GDB 调试我的 Objective-C 程序。我有一个函数- (NSString *)reverse:(NSString *)someString
我想调试它。
我设置断点的方法如下:
(gdb) break -[MyClass reverse:]
现在,当代码到达断点时,如何打印地址甚至更好的值self
和方法参数?我做了一些谷歌搜索并找到了类似的建议po $rdx
但我发现没有任何效果。
我该如何解决这个问题?
克拉克·考克斯(Clark Cox)写了我所找到的对此最好的解释。我一直参考这个页面,并在本地制作了一份副本,以防它消失。
http://www.clarkcox.com/blog/2009/02/04/inspecting-obj-c-parameters-in-gdb/ 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
请记住,传递给方法的前两件事(在 $rdi 和 $rsi 中)是self
and _cmd
。我这里没有数这些。
如果您传递浮点、结构或四个以上的参数,事情会变得更加复杂,您应该阅读中的调用约定AMD64 ABI http://www.x86-64.org/documentation/abi-0.99.pdf第 3.2.3 节。如果您正在处理 i386、PPC 或 ARM,请参阅 Clark 的帖子,其中很好地涵盖了常见情况下的这些情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)