我想在特定类中特定属性的“objectAtIndex:”方法上设置符号断点。
请参阅以下代码:
@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()
这些解决方案都不起作用。
有什么想法可以做到这一点吗?
经过一番挖掘,我找到了解决这个问题的方法。这有点难看。
它涉及在第一个断点触发的命令中动态创建条件断点。
首先,只要 fooArray 准备好就中断。我决定fooArray
访问器,但可以更早完成:
breakpoint set --name "-[Foo fooArray]"
然后,你想要的是打破objectAtIndex:
在此特定数组对象上调用。首先让我们将其指针放入变量中:
expr id $watch = self->_fooArray
然后在条件中使用此变量创建一个新断点:
breakpoint set --name "-[__NSArrayI objectAtIndex:]" --condition "$rdi == $watch"
-
$rdi
包含self
,至少在x86_64
. Use $r0
在ARM上。 (参见克拉克·考克斯的关于这个主题的好帖子 http://www.clarkcox.com/blog/2009/02/04/inspecting-obj-c-parameters-in-gdb/.)
-
-[NSArray objectAtIndex:]
从未被调用过。正如 Peter 提到的,NSArray 是一个类簇,而你的数组实际上是一个__NSArrayI
.
或者,在 Xcode 中:
(不要忘记选中“继续”框。)
它不是很漂亮,但似乎很有效!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)