【发布时间】:2010-10-14 00:24:09
【问题描述】:
我有一个递归下降树对象。我希望能够设置断点并在 Xcode 调试器中检查它。检查顶层工作得很好。但是在我下降一个级别左右之后,调试器说 ivars 的值超出了范围。有什么办法可以防止这种情况发生吗?
编辑:
回应评论--
ivar 是 Expression 类的对象。嵌套主要来自主体 ivar,它通常是表达式对象的 NSMutableArray。所以你可能有这样的结构:
-表达式
---正文(2个表达式)
-----0 表达式
-------正文(1个表达式)
----------0 表达式
------------正文 [空]
-----1 表达式
-------正文[空]
还有一个头部ivar,是Token类的一个对象,里面又包含一些字符串ivar,不嵌套。
我使用调试器的方式——我在 Expression 对象内的方法中设置了一个断点。然后我单击显示三角形以获取参数,然后单击 self,然后单击 body ivar,然后单击 body ivar 中的表达式,依此类推。但最终调试器不再告诉我事物的值。
【问题讨论】:
-
开始赏金以解决这个问题。最好的答案是不涉及编写任何代码的答案。但是,如果有一种方法可以让我编写一次代码,然后能够检查我的类的任何对象树,而无需提前指定树中的确切位置,那么即使是涉及将 ivars 纳入范围的额外代码的答案也会有价值我会想在运行时去。
-
您能指定 ivars 类型吗?你是如何使用调试器的?在 gdb 的控制台中单击鼠标或输入命令?
-
你可能对这个话题感兴趣:stackoverflow.com/questions/1427871/…
-
这很有趣,谢谢。但即使将“{(int)[$VAR count]} objects {(NSString *)[(NSArray *)$VAR description]}:s” 放入汇总字段后,我仍然只能检查顶部的内容-水平体。我试过带引号和不带引号。
-
您可以接受与控制台相关的解决方案吗?您可以为您的类实现一个自定义的
description方法,该方法在包含的对象上递归调用description并以这种方式构造一个字符串。这样,您可以通过在根实例上调用description来获取整个树,类似于调试器将执行的操作(请参阅链接线程以了解如何在调试器控制台上执行此操作)。您可能无法请求子树,但您可以在运行时检查树。