iOS WebTryThreadLock崩溃

时间:2012-03-22 18:58:17

标签: iphone ios debugging crash locking

我的应用程序崩溃,我无法调试我的生活。当从设备和NSZombieEnabled上的Xcode插入和调试时,我没有收到崩溃。当我自己拔掉并运行应用程序,或者转动NSZombieEnabled时,它每次都会崩溃。

以下是关闭NSZombieEnabled时的内容:EXC_BAD_ACCESS

bool _WebTryThreadLock(bool), 0x58a260: Multiple locks on web thread not allowed! Please file a bug. Crashing now...
1   _ZL17_WebTryThreadLockb
2   _ZL14WebRunLoopLockP19__CFRunLoopObservermPv
3   __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
4   __CFRunLoopDoObservers
5   __CFRunLoopRun
6   CFRunLoopRunSpecific
7   CFRunLoopRunInMode
8   _ZL12RunWebThreadPv
9   _pthread_start
10  thread_start

以下是试飞的堆栈跟踪:

0 App 0x001ff492 testflight_backtrace + 142
1 App 0x001fffac TFSignalHandler + 212
2 libsystem_c.dylib 0x349e9538 _sigtramp + 48
3 JavaScriptCore 0x34b66aee WTFReportBacktrace + 146
4 WebCore 0x33ed5676 _ZL14WebRunLoopLockP19__CFRunLoopObservermPv + 30
5 CoreFoundation 0x33b39b4a __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
6 CoreFoundation 0x33b37d86 __CFRunLoopDoObservers + 258
7 CoreFoundation 0x33b3804e __CFRunLoopRun + 614
8 CoreFoundation 0x33abb4dc CFRunLoopRunSpecific + 300
9 CoreFoundation 0x33abb3a4 CFRunLoopRunInMode + 104
10 WebCore 0x33f7712e _ZL12RunWebThreadPv + 402
11 libsystem_c.dylib 0x349a0c1c _pthread_start + 320
12 libsystem_c.dylib 0x349a0ad7 thread_start + 7

之前我遇到过这次崩溃,我已经通过在发生崩溃的其中一个视图控制器上向我的viewDidLoad方法抛出一行来解决它:

[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow:0.01]];

这条线现在没有用。

导致应用崩溃的过程是: 现在共享视图控制器, 关闭共享视图控制器, 在tabViewController上切换选项卡视图,  按下显示share2视图控制器的按钮

我没有进行任何后台处理或更改任何UI,当您点击显示share2视图控制器的按钮时,会发生崩溃。这次崩溃几天前没有发生,我试图恢复所有的变化以找到问题的原因,但我没有运气。

我也在互联网上搜索了这个错误,我找到的任何信息都没有帮助我。

非常感谢任何向我指出正确方向的建议,谢谢!

3 个答案:

答案 0 :(得分:1)

堆栈跟踪根本没有帮助,只是表明异常是从另一个runloop重新抛出的。您需要一个崩溃报告,该报告还会显示最后一个异常回溯,以便了解它的来源。

没有这些知识,这是相当疯狂的猜测:我假设webview仍然在后台运行,然后尝试将一些数据发送给它的委托。您是否在共享视图控制器中设置了委托?您是否在viewWillDisappearviewDidDisappear上将其设置为nil?

P.S。:你添加的NSRunLoop系列是一个丑陋的黑客,你不应该这样做,因为它没有修复任何真实的东西。

P.P.S。:还有其他基于PLCrashReporter的崩溃报告框架和服务,它们提供最后一个异常回溯并显示所有线程的状态,而不是主线程。

答案 1 :(得分:0)

我是由TestFlight SDK本身引起的。删除了TestFlight“起飞”并且不再发生崩溃。

答案 2 :(得分:0)

我最终在两个问题屏幕之间重新进行导航,从那时起我就没有问题了。

我的回答:总是使用苹果导航,不要试图建立自己的:P