2012-08-12 10 views
9

UIWebViewベースのブラウザをiPadアプリケーションに組み込もうとしています。時間がかかり、デバッグは難しくなりますが、JavaScriptCore WTF::StringImpl::hash()のWebThread機能はいつも同じようにクラッシュします。これはEXC_BAD_ACCESS (SIGSEGV), KERN_INVALID_ADDRESS at 0x00000001を生成します。UIWebView iOS 5:WebKit/JavaScriptCoreクラッシュ

UIWebViewは、別のビューコントローラ(コンテナ)によってスタック状に管理されるビューコントローラ内にあります。私は4つ以下のブラウザーしか記憶できません。

クラッシュログに関する情報、またはクラッシュの原因となるものについては何か?

これは、Webスレッドのクラッシュログです:

Thread 2 name: WebThread 
Thread 2 Crashed: 
0 JavaScriptCore     0x32a97d46 WTF::StringImpl::hash() const + 42 
1 JavaScriptCore     0x32a97c6a WTF::HashTable<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >::lookupForWriting(WTF::StringImpl* const&) + 18 
2 JavaScriptCore     0x32a9b028 std::pair<WTF::HashTableIterator<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >, bool> WTF::HashTable<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >::add<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityHashTranslator<WTF::StringImpl*, WTF::StringImpl*, WTF::StringHash> >(WTF::StringImpl* const&, WTF::StringImpl* const&) + 448 
3 JavaScriptCore     0x32a9ae30 WTF::AtomicString::addSlowCase(WTF::StringImpl*) + 96 
4 WebCore       0x31bade0c WebCore::AtomicHTMLToken::initializeAttributes(WTF::Vector<WebCore::HTMLToken::Attribute, 10ul> const&) + 232 
5 WebCore       0x31b88076 WebCore::AtomicHTMLToken::AtomicHTMLToken(WebCore::HTMLToken&) + 302 
6 WebCore       0x31b87eae WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&) + 14 
7 WebCore       0x31b7d07e WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) + 150 
8 WebCore       0x31bee29a WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution() + 50 
9 WebCore       0x31bc87e6 WebCore::HTMLDocumentParser::notifyFinished(WebCore::CachedResource*) + 78 
10 WebCore       0x31bc7448 WebCore::CachedResource::checkNotify() + 40 
11 WebCore       0x31bc7308 WebCore::CachedScript::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) + 84 
12 WebCore       0x31bc7240 WebCore::CachedResourceRequest::didFinishLoading(WebCore::SubresourceLoader*, double) + 120 
13 WebCore       0x31bc715e WebCore::SubresourceLoader::didFinishLoading(double) + 158 
14 WebCore       0x31bc58c2 _ZN7WebCoreL16didFinishLoadingEP16_CFURLConnectionPKv + 46 
15 CFNetwork      0x347737ee URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 186 
16 CFNetwork      0x3476849e URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 418 
17 CFNetwork      0x3476819c URLConnectionClient::processEvents() + 100 
18 CFNetwork      0x347680d2 MultiplexerSource::perform() + 150 
19 CoreFoundation     0x313d2acc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8 
20 CoreFoundation     0x313d2298 __CFRunLoopDoSources0 + 208 
21 CoreFoundation     0x313d103e __CFRunLoopRun + 646 
22 CoreFoundation     0x3135449e CFRunLoopRunSpecific + 294 
23 CoreFoundation     0x31354366 CFRunLoopRunInMode + 98 
24 WebCore       0x31b74c9c _ZL12RunWebThreadPv + 396 
25 libsystem_c.dylib    0x33bca72e _pthread_start + 314 
26 libsystem_c.dylib    0x33bca5e8 thread_start + 0 

答えて

0

クラッシュログが示すように、それにはJavaScript関連の問題がある可能性がありますように、それが見えます。あなたがロードしているページにJavaScriptがあると仮定します。関心のないところでは、モバイルSafariでウェブページがうまく動作しますか?UIWebViewに問題があるだけですか?

JSやウェブページが他のモバイル/デスクトップブラウザやデバイスで正常に動作するように見える場合は、問題を再現するために使用したJavaScriptとともにAppleにバグを報告することをおすすめします。

11

私は同じ問題を抱えていました。一日を過ごしました...これらのようなWebKitのエラーがたくさんありました。最後に、私はそれを得ました:これはマルチスレッドの問題でした!私はスレッド1からWebViewを作成し、スレッド2のJS関数を使用してコンテンツを修正しようとしました...

単純なperformSelectorOnMainThread:withObject:waitUntilDone:が問題を修正しました!

多分、これは誰かを助けるでしょう。

+0

amCで非常に新しいです。この行を実行または配置する場所performSelectorOnMainThread:withObject:waitUntilDone: – Khaleel

+1

@Khaleelまず、マルチスレッドの使用方法、スレッドのやり取りの仕方を読んでください。その後、その機能をどこに置くべきかが明確になります。 :)また、あなたのコードとクラッシュレポートを別の質問に投稿して、そこで話しましょう。 –

+0

を呼び出す代わりに、 self.performSelectorOnMainThread( "YOURFUNCTIONNAME:"、withObject:postString、waitUntilDone:true)を呼び出します。 –

関連する問題