我正努力用GDB来调试我的Objective-C程序。我有一个我想调试的函数- (NSString *)reverse:(NSString *)someString
。Objective-C - 使用GDB打印方法参数
以下是我设置的断点:
(gdb) break -[MyClass reverse:]
现在,当代码到达断点,我怎么打印地址,甚至更好的self
值和方法参数?我做了一些谷歌搜索,并找到像po $rdx
这样的建议,但没有发现任何作品。
我该如何解决这个问题?
我正努力用GDB来调试我的Objective-C程序。我有一个我想调试的函数- (NSString *)reverse:(NSString *)someString
。Objective-C - 使用GDB打印方法参数
以下是我设置的断点:
(gdb) break -[MyClass reverse:]
现在,当代码到达断点,我怎么打印地址,甚至更好的self
值和方法参数?我做了一些谷歌搜索,并找到像po $rdx
这样的建议,但没有发现任何作品。
我该如何解决这个问题?
克拉克考克斯写了这个我找到的最好的解释。我一直提到这个页面,并且已经制作了本地副本,以防万一它消失。
http://www.clarkcox.com/blog/2009/02/04/inspecting-obj-c-parameters-in-gdb/
快速版本的64位x86和非浮点参数是:
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的文章,该文章涵盖了那些适用于常见情况的案例。
在班级中实施description
方法。不管你喜欢什么,你都可以格式化值。从文档:
调试器的print-object命令间接调用此方法来产生对象的文本描述。
默认情况下'NSString'不提供'description'方法吗? – ryyst
除非你的类是从NSString派生出来的,否则你得到的NSObject的默认实现并没有太大的作用。你可以在调试器中做po自我。 – logancautrell
但是,如何打印方法参数('someString')? – ryyst
当使用gdb调试你可以用PO和打印()打印
po self
po someString
print (int) myInt
po
的作用就像NSLog(@"%@", self);
print()
的作用就像NSLog(@"%d", myInt);
*您可以打印多种类型的,如果你不是诠释
在XCode中运行你的程序,你可以在Debug窗口中查看你的自己的对象,变量和范围参数。 –
@MichaelDautermann:我不使用XCode。 – ryyst