我希望你能帮我翻译一下关于it技术的内容,需要翻译的是如何使用GDB调试Objective-C程序。我有一个函数- (NSString *)reverse:(NSString *)someString
需要调试。
以下是我设置断点的步骤:
(gdb) break -[MyClass reverse:]
现在,当代码到达断点时,我如何打印出
self
和方法参数的地址,甚至更好的是值?我已经做了一些谷歌搜索,并找到了像po $rdx
这样的建议,但没有任何一个有效。如何解决这个问题?我希望你能帮我翻译一下关于it技术的内容,需要翻译的是如何使用GDB调试Objective-C程序。我有一个函数- (NSString *)reverse:(NSString *)someString
需要调试。
以下是我设置断点的步骤:
(gdb) break -[MyClass reverse:]
self
和方法参数的地址,甚至更好的是值?我已经做了一些谷歌搜索,并找到了像po $rdx
这样的建议,但没有任何一个有效。如何解决这个问题?Clark Cox写了最好的解释,我找到过的。我一直参考这个页面,并制作了一个本地副本,以防它消失。
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
方法。你可以按照自己的喜好格式化值。来自文档的描述如下:
调试器的打印对象命令间接地调用此方法以生成对象的文本描述。
NSString
提供 description
方法吗? - ryystsomeString
)? - ryyst