Objective c 如何在“上设置断点”;objectAtIndex:“;XCode 4中特定类中特定属性的方法?
我想在特定类中特定属性的“objectAtIndex:”方法上设置一个符号断点 请参阅以下代码:Objective c 如何在“上设置断点”;objectAtIndex:“;XCode 4中特定类中特定属性的方法?,objective-c,xcode,xcode4,breakpoints,Objective C,Xcode,Xcode4,Breakpoints,我想在特定类中特定属性的“objectAtIndex:”方法上设置一个符号断点 请参阅以下代码: @interface Foo ... @property (strong,nonatomic) NSMutableArray *fooArray; ... @end 我试过以下几件事: -[[Foo fooArray]objectAtIndex: -[Foo::fooArray objectAtIndex: -[Foo::fooArray objectAtIndex] Foo::fooArray
@interface Foo
...
@property (strong,nonatomic) NSMutableArray *fooArray;
...
@end
我试过以下几件事:
-[[Foo fooArray]objectAtIndex:
-[Foo::fooArray objectAtIndex:
-[Foo::fooArray objectAtIndex]
Foo::fooArray::objectAtIndex:
Foo::fooArray::objectAtIndex
Foo::fooArray::objectAtIndex()
有什么办法吗?我不在Mac电脑上,所以我自己无法尝试,但是:
breakpoint set -n "-[[Foo fooArray] objectAtIndex:]"
不幸的是,尽管这会很有用,但由于多种原因,它无法工作 第一个涉及如何指定方法。用于在断点中标识方法的方法签名由三部分组成:
-¹[NSDictionary² objectForKey:³]
+¹[NSString² stringWithContentsOfURL:encoding:error:³]
-[NSArray objectAtIndex:
上设置断点,但它永远不会被击中,因为没有任何东西使用NSArray的objectAtIndex:
的实现-使用该实现没有意义,因为该实现会引发异常(旨在捕获忘记实现它的子类)
打破你问题的部分是:
虽然NSArray的各种非基本方法的实现最终是根据核心方法定义的,例如objectAtIndex:
,但这并不意味着子类必须使用这些实现。如果objectA,子类很可能有自己的实现,而不使用objectAtIndex:
tIndex:
不是执行这些操作的最有效方法(例如,如果数组由链表而不是C数组支持)
因此,总结一下这个冗长的答案:
- 调试器无法可靠地监视属性的值
- 因此,当调用作为该属性值的对象类中的方法时,调试器不可能中断,因为设置断点的正确方法可能随时更改,调试器无法知道何时会发生这种情况
- 即使您可以中断由属性标识的某些对象的
,数组也可能永远不会有效地使用objectAtIndex:
,在这种情况下,您的断点无论如何也不会被命中objectAtIndex:
你可能应该通过打开
objectAtIndex:
来问另一个问题,不管你想做什么。我想你是在调查应用程序中的一个bug;这个bug可能是另一个有趣的问题。经过一些挖掘,我找到了解决这个问题的方法。这有点难看
它涉及在由第一个断点触发的命令中动态创建条件断点
首先,在fooArray准备就绪时中断。我决定使用fooArray
访问器,但可以提前完成:
断点集--名称“-[Foo fooArray]”
然后,当对这个特定数组对象调用objectAtIndex:
时,您需要的是中断
expr id$watch=self->\u fooArray
然后在条件中使用此变量创建一个新断点:
断点集--名称“-[\u NSArrayI objectAtIndex:]”--条件“$rdi==$watch”
至少在$rdi