【发布时间】:2012-09-14 18:18:50
【问题描述】:
无法确定此错误发生了什么。
我正在分多个段上传文件。
我已将我的 api 调用线程化到 7 个并发线程中。
这是它停止的汇编代码。
这是我打印的堆栈跟踪
最后是堆栈窗口
除了 dispatch_get_low() 的#define 之外,我没有任何 DISPATCH_QUEUE_PRIORITY_LOW,并且我没有调用 dispatch_get_low()
作为一点背景知识,我正在从 xcode 4.4 开发我的应用程序,并且最近安装了 GM Seed 4.5 以在 ios 6 上进行测试。我所有的代码仍然是 ios5 并且这个 bug 在 xcode 更新前后一直困扰着我。
更新
将 NSZombieEnabled YES 添加回我的环境变量后
我以几乎相同的方式出现了一个不同的错误,但是这个错误被称为 forwarding
汇编断点
堆栈跟踪打印输出
调用堆栈窗口
我仍然不知道实际发生了什么。
我还在调查。任何进一步的帮助将不胜感激。
==== 新发展 ====
显然是在尝试获取 malloc 调用的一些输出时。我完全缓解了这个错误。
这令人沮丧,因为我认为启用此标志后我无法编译发布。
EXC_BAD_ACCESS 不再出现,因此日志将无用。这个错误是我遇到过的最奇怪的问题,而且我遇到了很多奇怪的 iOS 错误。
再次更新
我一直在跟踪这个错误。原来有问题的对象是-[CFNumber release] 调用该号码是在一个块中创建的,然后被传递给委托人。
也可以结合Core Data对象保存然后消失。
我添加了一个方法 HSLogBrute(@"") 记录行号和文件名。
我已经追踪到下面的代码。
if (progressMatch > progressPercent){
HSLogBrute(@"");
TransferStatus *transferStatus = [TransferStatus objectByID:task.transferStatusID];
HSLogBrute(@"");
transferStatus.segmentsTransferred = [NSNumber numberWithInt:segmentsTransferred.intValue];
HSLogBrute(@"");
transferStatus.segmentsTotal = [NSNumber numberWithInt:segmentsTotal.intValue];
HSLogBrute(@""); // This is the last log I am getting.
[transferStatus save];
HSLogBrute(@"");
}
HSLogBrute(@"");// Before putting in the [NSNumber numberWithInt:] calls this was the last line.
【问题讨论】:
-
你试过 NSZombies 了吗?
-
我很久以前就放了。我会确保它仍然在应用程序中。
-
查看此处了解如何正确启用它stackoverflow.com/questions/5386160/…
-
确保您尝试执行的块是有效的。在尝试执行坏块时,我遇到了错误的访问内存问题。
-
那么块应该被它们的封闭块保留和释放。我添加了
BlockType block = [blockVar copy];以启用复制并让堆栈块消失。但我没有看到任何改善。
标签: ios5 core-data automatic-ref-counting grand-central-dispatch ios6