2011-08-11 137 views
6

由于AVAudioRecorder实例上的方法调用,我正在努力处理抛出异常的底部。我设置了一个异常断点,但我无法从堆栈跟踪中收集任何有用的信息。在此抛出异常关键是要在通话过程中:在XCode 4中调试异常

[recorder prepareToRecord];

如果我把断点关闭应用程序运行正常看似没有任何负面影响。录像机功能正常。要明确,情况的具体情况并不那么重要。这更像是一个'在这种情况下我应该怎么做才能解决问题?'我看不到任何有关手头工具问题的方法。关于ACBaseCodec的文档看起来很陈旧,并没有说明可能导致抛出异常的原因。从调试导航

堆栈跟踪:

Debug Navigator

堆栈跟踪从各个螺纹:

enter image description here

有没有什么办法知道是什么原因造成这个异常?

+0

你能显示一些代码吗?你是否已经检查了内存管理问题?你说这只发生在你设置异常断点时吗? – jtbandes

+0

我认为你应该发布一些代码,我们可能可以在“来源”帮助 –

回答

1

如果程序在调试器处于活动状态时失败,则线程中可能存在竞争条件。 此外,您可能想尝试将NSZombieEnabled设置为true或在Instruments中运行程序以查看是否有内存问题导致问题。记录器对象是否保留?

我看到一些程序崩溃时没有运行调试程序,但在调试程序处于活动状态时正常运行,但我从未见过这种情况。

调试器是否记录任何消息?

0

通过仪器运行。它可能没有任何问题。如果你没有收到任何错误,你不应该担心。

9

不幸的是,我认为AVAudioPlayer和AVAudioRecorder似乎使用C++异常作为其在prepareTo中的正常处理流程的一部分....所以,如果您在所有异常中启用中断,则没有真正的方法来避免在那里停止。你可能只是继续并通过它。另一个可能的解决方法是仅启用Objective-C异常,因为它似乎在抛出C++异常。这就是我所做的。对不起,这不是一个答案,为什么他们做了prepareTo ...的设计决定超出了我。

+0

感谢您的回复。我早就放弃尝试第二次猜测苹果公司就SDK做出的决定。我有一个偷偷摸摸的怀疑,那就是创建一个人为的进入门槛,以避免在AppStore上结束太多垃圾。除此之外,你还能解释在Xcode 4.2中甚至是如何彻底破坏静态库的处理? – Undistraction