Iphone XCode中的堆栈跟踪没有给出错误发生的上下文

Iphone XCode中的堆栈跟踪没有给出错误发生的上下文,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我遇到了很多使用最新版本XCode的实例(我相信这是从4.2左右开始发生的),其中抛出异常时的堆栈跟踪非常缺乏细节 这里的screeshot说明了一个这样的例子;事实上,这个场景至少有一些上下文(它告诉我它发生在JKArray类中),很多时候我只得到“内部”堆栈项(线程中只有2-3个条目,它们都不在用户代码中,也不在我可以查看的任何内容中)。即使在这个例子中,我也不知道JKArray是在哪里分配或发布的,所以我不知道是什么实例或问题在哪里 想法: 我已经尝试添加一个通用的“on except

我遇到了很多使用最新版本XCode的实例(我相信这是从4.2左右开始发生的),其中抛出异常时的堆栈跟踪非常缺乏细节

这里的screeshot说明了一个这样的例子;事实上,这个场景至少有一些上下文(它告诉我它发生在JKArray类中),很多时候我只得到“内部”堆栈项(线程中只有2-3个条目,它们都不在用户代码中,也不在我可以查看的任何内容中)。即使在这个例子中,我也不知道JKArray是在哪里分配或发布的,所以我不知道是什么实例或问题在哪里

想法:

  • 我已经尝试添加一个通用的“on exception”断点
  • 输出中有一些次要信息可用;在本例中:“对象0x10e18120的malloc:*错误:未分配要释放的指针*在malloc\u error\u break中设置断点以进行调试”。但是,这样做并没有让我得到更多的帮助,因为断点与异常在同一堆栈中被命中
  • 我已尝试切换到其他调试器
  • 我已经尝试使用自己的自定义异常处理程序
  • 我试着用探查器来寻找漏洞。我找不到任何漏洞
无论我做什么,我似乎都无法隔离困扰我的应用程序的问题。此外,问题似乎每次都不完全相同,可能是因为我的应用程序中存在大量并发性。。。所以我没有一个好办法来解决问题



编辑:在这个特殊的例外情况下,我最终找到了原因。我曾试图[释放]和[自动释放]的对象。然而,所有这些都发生在我的代码中;我不明白为什么XCode不给我一个像样的堆栈跟踪来帮助我找到问题,而不是强迫我搜索整个应用程序…

有时不可能找出真正的问题,因为导致症状的问题发生得更早

您的问题提供了一个很好的例子:当您释放对象时,cocoa不知道您做错了什么:您正在释放一个您拥有的对象,这正是您应该做的,因此没有危险信号。导致崩溃的代码在方法完成后很好地执行,并将控制权交还给运行循环。此时,运行循环开始耗尽其自动释放池,导致第二次释放。然而,在这一点上,它所知道的是运行循环进行了无效的释放,而不是您的代码。当错误发生时,罪魁祸首已经安全地脱离了堆栈(并且脱离了钩子),因此Xcode无法向您报告任何其他情况

解决这类问题的方法是分析内存使用情况:分析程序应该捕捉到这样的问题,并指出它们发生的地方


不用说,切换到自动引用计数将为您节省内存管理部门的许多麻烦。

各方面都很公平。不过,我至少希望有一些背景。。。但我想这并不总是可能的。想想看,所有困扰我的虫子都是这种类型的;)也就是说,探查器没有捕捉到这些问题:(而且ARC在这个项目上对我来说不是一个真正的选项。@ZaneClaes不幸的是,C衍生工具缺少“fail fast”例外情况很多:未定义的行为通常会在很久以后才表现出来,而且通常会在真正意想不到的地方表现出来。我认为这是访问与C/Objective C/C++相关的超低开销的成本,当任何额外开销直接从用户的电池寿命中减去时,这是一个公平的权衡:)只是为了确定,您是否尝试使用NSZombie进行调试?