正如标题所示,我有一个从Xcode启动时运行良好的应用程序,但从主屏幕启动时崩溃。
运行构建和分析显示没有内存泄漏或警告。 (虽然,我并不认为这是一种虚假的安全感。)
相应的设备日志显示:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0439e000
这让我觉得这是一个发布/保留问题,但为什么它不会出现在Build / Analyze中?为什么从Xcode运行时它会正常运行?
修改
我还应该注意,在Xcode和主屏幕启动的模拟器中,应用程序“运行”很好。我说“运行”,因为它使用了相机,所以在这种情况下在模拟器上运行并不是那么有用。
<小时/> 的更新
谢谢,所有。所有资源似乎都被正确命名。我正在尝试让atos命令正常工作。我一直收到相同的地址,而不是类文件名和行号。
答案 0 :(得分:0)
有时(可能在您的情况下)当应用程序首次从XCode启动时,它是构建并作为应用程序的新实例运行。然后,当您停止并尝试从主屏幕运行它时,它可能会从后台启动。如果您的应用程序从后台启动时没有正确管理内存,则分析仪不会检测到内存问题。 要查明是否是这种情况,请尝试双击主页按钮并退出应用程序(如果它出现在那里)。然后从主屏幕再次启动它。您也可以尝试使用这些仪器进行调试。
答案 1 :(得分:-1)
忘记atos。我意识到设备日志列表发生了崩溃的线程,文件和行号。它始终存在于我的AVCaptureSession委托captureOutput方法中。
运行“unplugged”时,我得到的CVPixelBufferGetBaseAddress值大约高出200倍。我还发现,当我在其中一个循环中运行一个简单的诊断NSLog时,崩溃停止了(但它阻止了主线程上的某些东西被调用,所以这不是一个永久修复)。
在这个过程中,我在黑暗调整中进行了一次尝试,删除了基地址上的操作。为了保存循环迭代,我正在做这样的事情来跳过缓冲区中的每个其他像素:
byteIndex += (bytesPerPixel * 2);
下载到以下内容完全解决了问题:
byteIndex += (bytesPerPixel);