Dan*_*ark 31 debugging xcode objective-c lldb
我有一个看起来像这样的断点
-[UITableViewCell setSelected:]
Run Code Online (Sandbox Code Playgroud)
它工作,但我无法弄清楚如何获得传递的值.
我曾尝试-[UITableViewCell setSelected:(BOOL)what]和-[UITableViewCell setSelected:what]不工作在所有.
如何访问参数?
如果这不起作用,我将不得不做一个DebugUITableViewCell公正的事情,看看发生了什么,这是一个麻烦,触及了很多代码.
Aar*_*den 29
如果在设备上调试代码,则在达到断点时的参数将始终位于寄存器r0,r1和r2中.如果您使用,po $r0您将看到接收setSelected的对象.如果你使用po $r1你将得到"没有Objective-C描述可用"因为那是选择器.检查$ r2以查看是否将所选项设置为YES或NO.这是关于i386的类似故事,但我不记得手头使用了哪些寄存器.
您可以将-[UITableViewCell setSelected:]自己的实现替换为调试目的。在下面,UITableViewCellSetSelected将代替UIKit的方法被调用。
static void (*__originalUITableViewCellSetSelected)( UITableViewCell *, SEL, BOOL ) ;
static void UITableViewCellSetSelected( UITableViewCell * self, SEL _cmd, BOOL b )
{
// your code here... (or set a breakpoint here)
NSLog(@"%@<%p> b=%s\n", [ self class ], self, b ? "YES" : "NO" ) ;
(*__originalUITableViewCellSetSelected)( self, _cmd, b ) ; // call original implementation:
}
@implementation UITableViewCell (DebugIt)
+(void)load
{
Method m = class_getInstanceMethod( [ self class ], @selector( setSelected: ) ) ;
__originalUITableViewCellSetSelected = (void(*)(id, SEL, BOOL))method_getImplementation( m ) ;
method_setImplementation( m, (IMP)UITableViewCellSetSelected ) ;
}
@end
Run Code Online (Sandbox Code Playgroud)