在WebThread中的iOS uiwebview崩溃

我正在寻找一些build议或帮助诊断这个我看到的崩溃。 目前,我认为这可能是一个webkit的bug,但任何事情都是可能的,所以请提供你可能有的任何见解:

事件标识符:AEB8EE37-E5D4-4975-97F4-2B2038AC225A
 CrashReporter注册商标:92349a05395ea832c40c49c9e48997c1d65a2371
硬件型号:iPad3,3
过程:触摸[242]
path:/var/mobile/Applications/4D2CAEEE-D0F8-4BB4-989A-F8623C877C78/Touch.app/Touch
标识符:StayinFrontTouch
版本:3.2.40(3.2.40)
代码types:ARM(Native)
父进程:launchd [1]

date/时间:2014年4月30日15:26:46.137 +1200
操作系统版本:iOS 7.1.1(11D201)
报告版本:104

exceptiontypes:EXC_BAD_ACCESS(SIGSEGV)
exception子types:0x00000258处的KERN_INVALID_ADDRESS
由主题触发:2

线程0:
 0 libsystem_kernel.dylib 0x3a2ffa58 mach_msg_trap + 20
 1 libsystem_kernel.dylib 0x3a2ff854 mach_msg + 44
 2 CoreFoundation 0x2f06e896 __CFRunLoopServiceMachPort + 150
 3 CoreFoundation 0x2f06d002 __CFRunLoopRun + 850
 4 CoreFoundation 0x2efd7f0a CFRunLoopRunSpecific + 518
 5 CoreFoundation 0x2efd7cee CFRunLoopRunInMode + 102
 6 GraphicsServices 0x33f0a65e GSEventRunModal + 134
 7 UIKit 0x31923168 UIApplicationMain + 1132
 8触摸0x000c064a 0xbd000 + 13898
 9触摸0x000bf854 0xbd000 + 10324

主题1:
 0 libsystem_kernel.dylib 0x3a2ff808 kevent64 + 24
 1 libdispatch.dylib 0x3a241078 _dispatch_mgr_invoke + 228
 2 libdispatch.dylib 0x3a240dfe _dispatch_mgr_thread $ VARIANT $ mp + 34

线程2名称:WebThread
线程2崩溃:
 0 WebCore 0x37584302 WebCore :: SubresourceLoader :: didReceiveResponse(WebCore :: ResourceResponse const&)+ 26
 1 WebCore 0x377f751c WebCore :: DocumentLoader :: substituteResourceDeliveryTimerFired(WebCore :: Timer *)+ 212
 2 WebCore 0x374ad3f4 WebCore :: ThreadTimers :: sharedTimerFiredInternal()+ 132
 3 WebCore 0x374ad346 WebCore :: timerFired(__ CFRunLoopTimer *,void *)+ 22
 4 CoreFoundation 0x2f06f1b4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 12
 5 CoreFoundation 0x2f06edca __CFRunLoopDoTimer + 778
 6 CoreFoundation 0x2f06d166 __CFRunLoopRun + 1206
 7 CoreFoundation 0x2efd7f0a CFRunLoopRunSpecific + 518
 8 CoreFoundation 0x2efd7cee CFRunLoopRunInMode + 102
 9 WebCore 0x3753a116 RunWebThread(void *)+ 414
 10 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 11 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 12 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

线程3名称:com.apple.NSURLConnectionLoader
主题3:
 0 libsystem_kernel.dylib 0x3a2ffa58 mach_msg_trap + 20
 1 libsystem_kernel.dylib 0x3a2ff854 mach_msg + 44
 2 CoreFoundation 0x2f06e896 __CFRunLoopServiceMachPort + 150
 3 CoreFoundation 0x2f06cfbc __CFRunLoopRun + 780
 4 CoreFoundation 0x2efd7f0a CFRunLoopRunSpecific + 518
 5 CoreFoundation 0x2efd7cee CFRunLoopRunInMode + 102
 6基础0x2fa17082 + [NSURLConnection(Loader)_resourceLoadLoop:] + 314
 7基金会0x2fa8ca5a __NSThread__main__ + 1058
 8 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 9 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 10 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

主题4:
 0 libsystem_kernel.dylib 0x3a2ffa58 mach_msg_trap + 20
 1 libsystem_kernel.dylib 0x3a2ff854 mach_msg + 44
 2 CoreFoundation 0x2f06e896 __CFRunLoopServiceMachPort + 150
 3 CoreFoundation 0x2f06cfbc __CFRunLoopRun + 780
 4 CoreFoundation 0x2efd7f0a CFRunLoopRunSpecific + 518
 5 CoreFoundation 0x2efd7cee CFRunLoopRunInMode + 102
 6 libAVFAudio.dylib 0x2e04f44c GenericRunLoopThread :: Entry(void *)+ 124
 7 libAVFAudio.dylib 0x2e0437bc CAPThread :: Entry(CAPThread *)+ 176
 8 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 9 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 10 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

线程5名称:JavaScriptCore :: BlockFree
主题5:
 0 libsystem_kernel.dylib 0x3a311f2c __psynch_cvwait + 24
 1 libsystem_pthread.dylib 0x3a37af22 _pthread_cond_wait + 518
 2 libsystem_pthread.dylib 0x3a37bd60 pthread_cond_wait + 36
 3 JavaScriptCore 0x30004ee4 JSC :: BlockAllocator :: blockFreeingThreadMain()+ 204
 4 JavaScriptCore 0x30002538 WTF :: wtfThreadEntryPoint(void *)+ 12
 5 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 6 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 7 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

线程6名称:JavaScriptCore ::标记
主题6:
 0 libsystem_kernel.dylib 0x3a311f2c __psynch_cvwait + 24
 1 libsystem_pthread.dylib 0x3a37af22 _pthread_cond_wait + 518
 2 libsystem_pthread.dylib 0x3a37bd60 pthread_cond_wait + 36
 3 JavaScriptCore 0x301a0406 JSC :: GCThread :: waitForNextPhase()+ 74
 4 JavaScriptCore 0x301a0460 JSC :: GCThread :: gcThreadMain()+ 48
 5 JavaScriptCore 0x30002538 WTF :: wtfThreadEntryPoint(void *)+ 12
 6 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 7 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 8 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

线程7名称:WebCore:CFNetwork Loader
主题7:
 0 libsystem_kernel.dylib 0x3a2ffa58 mach_msg_trap + 20
 1 libsystem_kernel.dylib 0x3a2ff854 mach_msg + 44
 2 CoreFoundation 0x2f06e896 __CFRunLoopServiceMachPort + 150
 3 CoreFoundation 0x2f06cfbc __CFRunLoopRun + 780
 4 CoreFoundation 0x2efd7f0a CFRunLoopRunSpecific + 518
 5 CoreFoundation 0x2efd7cee CFRunLoopRunInMode + 102
 6 WebCore 0x37582b12 WebCore :: runLoaderThread(void *)+ 250
 7 JavaScriptCore 0x30002538 WTF :: wtfThreadEntryPoint(void *)+ 12
 8 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 9 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 10 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

线程8名称:com.apple.CFSocket.private
线程8:
 0 libsystem_kernel.dylib 0x3a312434 __select + 20
 1 CoreFoundation 0x2f072758 __CFSocketManager + 480
 2 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 3 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 4 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

线程9名称:WebCore:LocalStorage
主题9:
 0 libsystem_kernel.dylib 0x3a311f2c __psynch_cvwait + 24
 1 libsystem_pthread.dylib 0x3a37af22 _pthread_cond_wait + 518
 2 libsystem_pthread.dylib 0x3a37bd60 pthread_cond_wait + 36
 3 JavaScriptCore 0x30005012 WTF :: ThreadCondition :: timedWait(WTF :: Mutex&,double)+ 58
 (WTF :: MessageQueueWaitResult&,bool(&)(WTF :: Function *),double)+ 104 WebCore 0x3766cf2c WTF :: PassOwnPtr> WTF :: MessageQueue> :: waitForMessageFilteredWithTimeout *)
 5 WebCore 0x3766ceb2 WebCore :: StorageThread :: threadEntryPoint()+ 162
 6 JavaScriptCore 0x30002538 WTF :: wtfThreadEntryPoint(void *)+ 12
 7 libsystem_pthread.dylib 0x3a37b916 _pthread_body + 138
 8 libsystem_pthread.dylib 0x3a37b886 _pthread_start + 98
 9 libsystem_pthread.dylib 0x3a379aa0 thread_start + 4

主题10:
 0 libsystem_kernel.dylib 0x3a312c70 __workq_kernreturn + 8
 1 libsystem_pthread.dylib 0x3a379bda _pthread_wqthread + 306
 2 libsystem_pthread.dylib 0x3a379a94 start_wqthread + 4

主题11:
 0 libsystem_kernel.dylib 0x3a312c70 __workq_kernreturn + 8
 1 libsystem_pthread.dylib 0x3a379bda _pthread_wqthread + 306
 2 libsystem_pthread.dylib 0x3a379a94 start_wqthread + 4

主题12:
 0 libsystem_kernel.dylib 0x3a312c70 __workq_kernreturn + 8
 1 libsystem_pthread.dylib 0x3a379bda _pthread_wqthread + 306
 2 libsystem_pthread.dylib 0x3a379a94 start_wqthread + 4

主题13:
 0 libsystem_kernel.dylib 0x3a312c70 __workq_kernreturn + 8
 1 libsystem_pthread.dylib 0x3a379bda _pthread_wqthread + 306
 2 libsystem_pthread.dylib 0x3a379a94 start_wqthread + 4

主题14:
 0 libsystem_kernel.dylib 0x3a312c70 __workq_kernreturn + 8
 1 libsystem_pthread.dylib 0x3a379bda _pthread_wqthread + 306
 2 libsystem_pthread.dylib 0x3a379a94 start_wqthread + 4

主题15:
 0 libsystem_kernel.dylib 0x3a312c70 __workq_kernreturn + 8
 1 libsystem_pthread.dylib 0x3a379bda _pthread_wqthread + 306
 2 libsystem_pthread.dylib 0x3a379a94 start_wqthread + 4

线程2与ARM线程状态(32位)崩溃:
     r0:0x00000000 r1:0x04ee0238 r2:0x375842e9 r3:0x019cb6b8
     r4:0x0a916c00 r5:0x04ee0238 r6:0x0a916c00 r7:0x01bbf028
     r8:0x0549ea00 r9:0x00000002 r10:0x0549e9c8 r11:0x03bc3000
     ip:0x3a6c7838 sp:0x01bbf014 lr:0x377f751f pc:0x37584302
   cpsr:0x20000030

二进制图像:
 ...

我做了一些关于堆栈跟踪的进一步调查,并在这里find了Subresourceloader的代码( https://webkit.googlesource.com/WebKit/+/master/Source/WebCore/loader/SubresourceLoader.cpp )。

我的猜测是,m_resource在这个标记为(****)的地方是NULL,导致崩溃:

void SubresourceLoader::didReceiveResponse(const ResourceResponse& response) { ASSERT(!response.isNull()); ASSERT(m_state == Initialized); // Reference the object in this method since the additional processing can do // anything including removing the last reference to this object; one example of this is 3266216. Ref<SubresourceLoader> protect(*this); if (m_resource->resourceToRevalidate()) { **** if (response.httpStatusCode() == 304) { // 304 Not modified / Use local copy // Existing resource is ok, just use it updating the expiration time. m_resource->setResponse(response); memoryCache()->revalidationSucceeded(m_resource, response); if (!reachedTerminalState()) ResourceLoader::didReceiveResponse(response); return; } // Did not get 304 response, continue as a regular resource load. memoryCache()->revalidationFailed(m_resource); } ... 

如果它在重新安装后工作,那么你可以尝试做不caching的URL请求,因为我会假设会给出相同的结果:

 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30]; [webView loadRequest:request]; 

我猜测资源caching出了问题。