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

Objective-C-使用GDB打印方法参数,objective-c,gdb,Objective C,Gdb,我正在努力用GDB调试我的Objective-C程序。我有一个要调试的函数-(NSString*)reverse:(NSString*)someString 下面是我设置断点的方法: (gdb) break -[MyClass reverse:] 现在,当代码到达断点时,如何打印地址,或者更好地打印self的值和方法参数?我在谷歌上搜索了一些建议,比如po$rdx,但我发现没有一个是有效的 我如何解决这个问题?在你的课堂上实现描述方法。您可以按自己的喜好格式化这些值。从文档中: 调试器的pri

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

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

(gdb) break -[MyClass reverse:]
现在,当代码到达断点时,如何打印地址,或者更好地打印
self
的值和方法参数?我在谷歌上搜索了一些建议,比如
po$rdx
,但我发现没有一个是有效的


我如何解决这个问题?

在你的课堂上实现
描述
方法。您可以按自己的喜好格式化这些值。从文档中:

调试器的print object命令间接调用此方法以生成对象的文本描述


克拉克·考克斯写了我所发现的最好的解释。我一直在参考这一页,并制作了一份本地副本,以防它消失

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

first ObjC arg => $rdx
second ObjC arg => $rcx
third ObjC arg => $r8
fourth ObjC arg => $r9
记住,传递给方法的前两件事(在$rdi和$rsi中)是
self
\u cmd
。我不算这些


如果要传递浮点、结构或四个以上的参数,事情会变得更复杂,您应该阅读第3.2.3节中的调用约定。如果您处理的是i386、PPC或ARM,请参阅Clark的帖子,其中涵盖了常见情况下的这些情况。

使用gdb调试时,您可以使用po打印并打印()

po
的行为类似于
NSLog(@“%@”,self)
print()
的行为类似于
NSLog(@“%d”,myInt)


*您可以打印比int更多的类型。

默认情况下,
NSString
不提供
description
方法吗?除非您的类是从NSString派生的,否则您将获得NSObject的默认实现,而该实现没有太多功能。您可以在调试器中执行po self。但是如何打印方法参数(
someString
)?如果您在XCode中运行程序,则可以在“调试”窗口中查看self对象、变量和范围内参数。@MichaelDautermann:我不使用XCode。
po self
po someString


print (int) myInt