我正在努力用GDB调试我的Objective-C程序。我有一个函数- (NSString *)reverse:(NSString *)someString
我想调试。
以下是我设置断点的方法:
(gdb) break -[MyClass reverse:]
现在,当代码到达断点时,如何打印地址,甚至更好地self
和方法参数的值?我做了一些谷歌搜索,发现像po $rdx
这样的建议,但我找不到任何建议。
我该如何解决这个问题?
答案 0 :(得分: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
请记住,传递给方法的前两个内容(在$ rdi和$ rsi中)是self
和_cmd
。我不算这些。
如果你传递浮点,结构或超过四个参数,事情变得更复杂,你应该阅读AMD64 ABI部分3.2.3中的调用约定。如果您正在处理i386,PPC或ARM,请参阅Clark的帖子,该文章适用于常见案例。
答案 1 :(得分:3)
使用gdb进行调试时,可以使用po和print()
进行打印po self
po someString
print (int) myInt
po
就像NSLog(@"%@", self);
一样
print ()
的行为类似于NSLog(@"%d", myInt);
*您可以打印比int
更多的类型答案 2 :(得分:1)
在班级中实施description
方法。您可以根据需要格式化值。来自文档:
调试器的print-object命令间接调用此方法来生成对象的文本描述。