37

私はこのようなブレークポイントを持っています

-[UITableViewCell setSelected:]

動作しますが、渡された値を取得する方法がわかりません。

私は試してみ-[UITableViewCell setSelected:(BOOL)what]まし-[UITableViewCell setSelected:what]たが、まったく機能しません。

パラメータにアクセスするにはどうすればよいですか?

これがうまくいかない場合は、DebugUITableViewCell何が起こっているのかを確認するためだけに を作成する必要があります。これは手間がかかり、多くのコードに触れます。

4

7 に答える 7

35

デバイス上でコードをデバッグする場合、ブレークポイントに到達したときのパラメーターは一貫してレジスター r0、r1、および r2 にあります。使用するpo $r0と、setSelected を受け取るオブジェクトが表示されます。使用po $r1すると、それがセレクターであるため、「Objective-C の説明がありません」というメッセージが表示されます。$r2 を調べて、selected が YES または NO に設定されているかどうかを確認します。i386 でも同様の話ですが、どのレジスタが使用されているか思い出せません。

于 2013-03-20T01:04:25.553 に答える
17

LLDB on Simulator での使用

p $arg3

最初のパラメーター。

于 2016-06-12T19:09:53.690 に答える
6

-[UITableViewCell setSelected:]デバッグ目的で独自の実装に置き換えることができます。以下、UITableViewCellSetSelectedUIKitのメソッドの代わりに呼び出されます。

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
于 2013-03-20T01:13:41.957 に答える