如何跟踪导致Xcode异常的变量?

时间:2014-04-18 20:42:32

标签: objective-c xcode lldb

我的程序在指示以下内容后崩溃。我知道NSArrays发生了一些不好的事情。我应该如何跟踪导致异常的数组变量?

enter image description here

2 个答案:

答案 0 :(得分:2)

追踪阵列并不会对你有所帮助(但见下文)。您已经过度发布了某些内容,可能是NSArray本身,并且在自动释放池耗尽之前您还没有发现它。这些可能是一些最难追踪的错误;希望它能够一致地再现。

典型的解决方案是:

  • 确保您使用ARC。这正是ARC在避免方面做得很好的一种错误。 (通常这种崩溃表明你并没有使用它;但在某些情况下可以将它们置于ARC下。)
  • 找出哪个NSArray有问题。审核其用法并确保(如果您不使用ARC),您在每个点都遵循内存管理规则。关于"制定哪个NSArray,"这本身就很棘手,但是一些常识通常是这里最好的工具。你可能对它是什么对象有一些了解。一点点试错可以有很长的路要走。
  • 避免直接进入ivar;始终使用访问者,initdealloc除外。这是避免这些内存错误的最好方法(除了ARC之外)。

仪器可以在保留和释放上添加痕迹(使用Zombies仪器)。还有NSZombies,也可以提供帮助。但我发现在绝大多数情况下,最好的第一步是搜索您使用该对象的所有时间,然后手动检查您的保留和释放。 (我并不是说这些方法中的任何一种都很简单;只是快速的副手审核通常比工具更有效。)

当然要确保使用ARC。

答案 1 :(得分:0)

这样做的最好方法是在很多场合帮助你,就是设置XCode,以便在抛出异常时自动中断。您可以按如下方式执行此操作:

第1步:转到断点导航器。

enter image description here

第2步:转到左下方,然后点击' +'并添加异常断点。

enter image description here

步骤3:找到刚刚添加的断点,右键单击并编辑。

enter image description here

步骤4:将其更改为中断所有Objective-C异常,并且绝大多数崩溃将在发生崩溃的地方中断。

enter image description here

当异常发生时,您可以表现得好像正常进行调试 - 将值打印到控制台,或将鼠标悬停在控制台上以查看其值是什么。