繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM