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

时间:2011-11-17 21:15:30

标签: objective-c gdb

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

以下是我设置断点的方法:

(gdb) break -[MyClass reverse:]

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

我该如何解决这个问题?

3 个答案:

答案 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命令间接调用此方法来生成对象的文本描述。