我有一个BOOL实例变量 - 由于某种原因 - 一段时间之后总是读取NO,即使我将其设置为YES(是的,我不是那么愚蠢地写或读错了变量,相信我)。我花了一个小时搜索我的整个项目,寻找任何可能将变量设置为NO但无法找到它的可能性。
有没有办法跟踪它的值的变化,即让调试器暂时停在变量即将被修改的位置?
答案 0 :(得分:10)
在不破解代码的情况下找到解决方案:
启动启用断点的调试器
在相关变量在范围
运行。当它停止时,检查调试器并找到该变量。
右键单击它并选择“观察变量”。
答案 1 :(得分:3)
您是否可以构建代码以使此BOOL实例变量成为属性?然后,您可以为此属性编写自己的setter函数,然后在该setter函数中设置断点。堆栈跟踪将告诉您什么称为setter方法。或者您可以使用键值观察来在应用程序的运行时观察该属性的更改,但这会增加更多的复杂性。
答案 2 :(得分:1)
重构代码以使您的BOOL值为@property,并在更改时使用KVO进行侦听。在侦听器方法中,您可以添加下一行以注销调用堆栈:
NSLog(@"Stack: %@", [NSThread callStackSymbols]);