我正在努力用GDB调试我的Objective-C程序.我有一个- (NSString *)reverse:(NSString *)someString我想调试的功能.
这是我设置断点的方法:
(gdb) break -[MyClass reverse:]
Run Code Online (Sandbox Code Playgroud)
现在,当代码到达断点时,如何打印地址甚至更好的值self和方法参数?我已经做了一些谷歌搜索,并找到了一些建议,po $rdx但我找不到任何建议.
我怎么解决这个问题?
Rob*_*ier 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
Run Code Online (Sandbox Code Playgroud)
记住,传递给方法的前两个东西(在$ rdi和$ rsi中)是self和_cmd.我不算这些.
如果你传递浮点,结构或超过四个参数,事情变得更复杂,你应该阅读AMD64 ABI第3.2.3节中的调用约定.如果您正在处理i386,PPC或ARM,请参阅Clark的帖子,该帖子适用于常见案例.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2492 次  |  
        
|   最近记录:  |