我在我的应用程序中使用H.264
编码QTKit
。
此应用程序总是以“ segmentation fault
”或“ EXEC_BAD_ACCESS
”崩溃。
我的调试器在这个地方显示了崩溃:
0x7fff801fea94: je 0x7fff801feba6 ; JVTLib_101906(JVTLib_100990*, JVTLib_101383 const*, JVTLib_101895*) + 3886
( ... )
0x7fff801feaba: movl $1, 24(%r13)
最后一个“ movl
”行导致崩溃。可以在评论中看到,它是JVT
来自编码器的模块H.264
(我假设)。
我不明白的是:我的代码工作了很长时间。从昨天开始就不稳定了。如果我使用“仪器”,代码运行良好。所以弹出菜单肯定有问题。取消注释视频程序工作正常(这意味着菜单没有内存问题)
了解背后的“魔力”QTKit
将是令人兴奋的。
编辑:我现在可以看到对象名称:崩溃发生在' QTBackgroundQueueRun
'线程中,对象是:'PBRemoveObjectInternal(FSRefParam*, unsigned char)
'
解决方案:大家好。我终于找到了问题!对 Goole 和 co 进行了漫长而艰苦的搜索。
QTKit
不喜欢被计时器打断。如果你在 'Debug' 模式下编译你的项目并包含调试符号并且 gdb 正在运行,应用程序将会崩溃!
NSLog 正在“发布”模式下工作。对于大多数调试问题,这将起作用。因此,如果您需要“真正”调试您的代码,请将一些 makro 定义添加到您的项目设置中,其中所有 QTCaptureMovieFileOutput 相关代码都将被删除。你完成了。我想知道为什么 QTKit 对这些东西如此敏感。但众所周知,Quicktime 是非常古老的代码,Apple 正在使用 Quicktime X 进行现代主义。所以我们都希望下次发布更好的版本。