[英]Objective-C - print method parameters with GDB
我正在努力用GDB调试我的Objective-C程序。 我有一个函数- (NSString *)reverse:(NSString *)someString
我想调试。
这是我设置断点的方法:
(gdb) break -[MyClass reverse:]
现在,当代码到达断点时,如何打印地址甚至更好的self
和方法参数的值? 我做了一些谷歌搜索,发现像po $rdx
这样的建议,但我找不到任何作品。
我怎么解决这个问题?
克拉克考克斯写了我所见过的最好的解释。 我一直都会参考这个页面并制作了一份本地副本,以防万一它消失。
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
和_cmd
。 我不算这些。
如果你传递浮点,结构或超过四个参数,事情变得更复杂,你应该阅读AMD64 ABI第3.2.3节中的调用约定。 如果您正在处理i386,PPC或ARM,请参阅Clark的帖子,该帖子适用于常见案例。
使用gdb进行调试时,可以使用po和print()进行打印
po self
po someString
print (int) myInt
po
就像NSLog(@"%@", self);
print ()
作用类似于NSLog(@"%d", myInt);
*您可以打印比int更多的类型
在您的类中实现description
方法。 您可以根据需要格式化值。 来自文档:
调试器的print-object命令间接调用此方法以生成对象的文本描述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.