2012-04-09 34 views
1

過去幾個月來,我一直在將自己的基於QtWebKit的瀏覽器(WildFox,獲得BSD許可)整合在一起,這是一次非常愉快的體驗。然而,我注意到奇怪的崩潰,基本上從一開始就是這樣。昨天,我決定在未能重複加載我的個人網站www.mayaposch.com時,深入研究這些崩潰事件。QtWebKit 2.2加載特定網站時出現的段錯誤

事件的順序如下:我用load()setUrl()告訴QWebView元素加載http://www.mayaposch.comloadFinished()返回false,表示出事的頁面加載,然後將應用程序分割故障時錯誤的。

我正在使用Qt 4.8(最新的SDK),發佈和調試庫(動態)。

堆棧跟蹤,同時運行調試版本使用gdb:

0 WTF::HashTable<WTF::RefPtr<WebCore::ResourceLoader>, std::pair<WTF::RefPtr<WebCore::ResourceLoader>, WTF::RefPtr<WebCore::SubstituteResource> >, WTF::PairFirstExtractor<std::pair<WTF::RefPtr<WebCore::ResourceLoader>, WTF::RefPtr<WebCore::SubstituteResource> > >, WTF::PtrHash<WTF::RefPtr<WebCore::ResourceLoader> >, WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<WebCore::ResourceLoader> >, WTF::HashTraits<WTF::RefPtr<WebCore::SubstituteResource> > >, WTF::HashTraits<WTF::RefPtr<WebCore::ResourceLoader> > >::isEmpty() const D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xbcd036e 
1 WTF::HashMap<WTF::RefPtr<WebCore::ResourceLoader>, WTF::RefPtr<WebCore::SubstituteResource>, WTF::PtrHash<WTF::RefPtr<WebCore::ResourceLoader> >, WTF::HashTraits<WTF::RefPtr<WebCore::ResourceLoader> >, WTF::HashTraits<WTF::RefPtr<WebCore::SubstituteResource> > >::isEmpty() const D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xbcc7315 
2 WebCore::DocumentLoader::cancelPendingSubstituteLoad(WebCore::ResourceLoader*) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb3cbb96 
3 WebCore::ResourceLoader::didCancel(WebCore::ResourceError const&) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb62277f 
4 WebCore::SubresourceLoader::didCancel(WebCore::ResourceError const&) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb75859c 
5 WebCore::ResourceLoader::cancel(WebCore::ResourceError const&) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb622900 
6 WebCore::ResourceLoader::cancel() D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb62285a 
7 WebCore::cancelAll(WTF::HashSet<WTF::RefPtr<WebCore::ResourceLoader>, WTF::PtrHash<WTF::RefPtr<WebCore::ResourceLoader> >, WTF::HashTraits<WTF::RefPtr<WebCore::ResourceLoader> > > const&) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb3c8725 
8 WebCore::DocumentLoader::stopLoadingSubresources() D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb3cbfa4 
9 WebCore::DocumentLoader::stopLoading() D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb3ca9e0 
10 WebCore::FrameLoader::stopAllLoaders(WebCore::ClearProvisionalItemPolicy) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f3694 
11 WebCore::FrameLoader::continueLoadAfterNavigationPolicy(WebCore::ResourceRequest const&, WTF::PassRefPtr<WebCore::FormState>, bool) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f7d29 
12 WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy(void*, WebCore::ResourceRequest const&, WTF::PassRefPtr<WebCore::FormState>, bool) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f76a1 
13 WebCore::PolicyCallback::call(bool) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb56e06c 
14 WebCore::PolicyChecker::continueAfterNavigationPolicy(WebCore::PolicyAction) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb56ed26 
15 WebCore::FrameLoaderClientQt::callPolicyFunction(void (WebCore::PolicyChecker::*)(WebCore::PolicyAction), WebCore::PolicyAction) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb141188 
16 WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(void (WebCore::PolicyChecker::*)(WebCore::PolicyAction), WebCore::NavigationAction const&, WebCore::ResourceRequest const&, WTF::PassRefPtr<WebCore::FormState>) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb146959 
17 WebCore::PolicyChecker::checkNavigationPolicy(WebCore::ResourceRequest const&, WebCore::DocumentLoader*, WTF::PassRefPtr<WebCore::FormState>, void (*)(void*, WebCore::ResourceRequest const&, WTF::PassRefPtr<WebCore::FormState>, bool), void*) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb56e7ef 
18 WebCore::FrameLoader::loadWithDocumentLoader(WebCore::DocumentLoader*, WebCore::FrameLoadType, WTF::PassRefPtr<WebCore::FormState>) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f25e9 
19 WebCore::FrameLoader::loadWithNavigationAction(WebCore::ResourceRequest const&, WebCore::NavigationAction const&, bool, WebCore::FrameLoadType, WTF::PassRefPtr<WebCore::FormState>) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f1fc5 
20 WebCore::FrameLoader::loadURL(WebCore::KURL const&, WTF::String const&, WTF::String const&, bool, WebCore::FrameLoadType, WTF::PassRefPtr<WebCore::Event>, WTF::PassRefPtr<WebCore::FormState>) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f17f1 
21 WebCore::FrameLoader::loadFrameRequest(WebCore::FrameLoadRequest const&, bool, bool, WTF::PassRefPtr<WebCore::Event>, WTF::PassRefPtr<WebCore::FormState>, WebCore::ReferrerPolicy) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2f1086 
22 WebCore::FrameLoader::urlSelected(WebCore::FrameLoadRequest const&, WTF::PassRefPtr<WebCore::Event>, bool, bool, WebCore::ReferrerPolicy, WebCore::ShouldReplaceDocumentIfJavaScriptURL) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2ece3e 
23 WebCore::FrameLoader::changeLocation(WTF::PassRefPtr<WebCore::SecurityOrigin>, WebCore::KURL const&, WTF::String const&, bool, bool, bool) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb2ec9de 
24 WebCore::ScheduledURLNavigation::fire(WebCore::Frame*) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xbc30de8 
25 WebCore::NavigationScheduler::timerFired(WebCore::Timer<WebCore::NavigationScheduler>*) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb3cd565 
26 WebCore::Timer<WebCore::NavigationScheduler>::fired() D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xbc7adb2 
27 WebCore::ThreadTimers::sharedTimerFiredInternal() D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb4a84e6 
28 WebCore::ThreadTimers::sharedTimerFired() D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb4a8433 
29 WebCore::SharedTimerQt::timerEvent(QTimerEvent*) D:\Dev\Qt\SDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll 0 0xb686a5a 
30 QObject::event qobject.cpp 1157 0x6a22499a 
31 QApplicationPrivate::notify_helper qapplication.cpp 4550 0xa4c020  
32 QApplication::notify qapplication.cpp 3932 0xa49973  
33 QCoreApplication::notifyInternal qcoreapplication.cpp 876 0x6a213252 
34 QCoreApplication::sendEvent qcoreapplication.h 231 0x6a283f54 
35 QEventDispatcherWin32::event qeventdispatcher_win.cpp 1135 0x6a23ac60 
36 QApplicationPrivate::notify_helper qapplication.cpp 4550 0xa4c020  
37 QApplication::notify qapplication.cpp 3932 0xa49973  
38 QCoreApplication::notifyInternal qcoreapplication.cpp 876 0x6a213252 
39 QCoreApplication::sendEvent qcoreapplication.h 231 0x6a283f54 
40 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1500 0x6a21416d 
41 qt_internal_proc qeventdispatcher_win.cpp 496 0x6a238a2f 
42 USER32!IsDialogMessageW C:\Windows\syswow64\user32.dll 0 0x75a46238 
43 operator+  0 0x7113ae  
44 USER32!AllowForegroundActivation C:\Windows\syswow64\user32.dll 0 0x75a468ea 
45 qt_fast_timer_proc qeventdispatcher_win.cpp 428 0x6a2387c8 
46 USER32!GetMessageExtraInfo C:\Windows\syswow64\user32.dll 0 0x75a47d31 
47 ??  0 

的斷層線(拆卸)表示爲:

0xbcd036e <+0x0006>   mov 0xc(%eax),%eax 

這是一個內部QtWebKit的錯嗎?從堆棧跟蹤中我會說,但是我缺乏內部知識來說明發生了什麼問題。崩潰最常發生在我的個人網站上,但其他人也報告說它也在其他網站上崩潰,包括中斷加載時(例如在加載完成之前點擊鏈接)。

感謝您提供的任何幫助。

回答

1

以Net147(喬納森·劉)上#Qt討論@ Freenode的IRC後,將其確定它確實是由於WebKit中的一個錯誤:https://bugs.webkit.org/show_bug.cgi?id=83565

的崩潰是由空指針引起ResourceLoader :: didCancel()函數中的Source/WebCore/loader/ResourceLoader.cpp。 m_documentLoader-> cancelPendingSubstituteLoad(this)在不檢查m_documentLoader是否爲空的情況下被調用。

我覺得最有趣的是我的代碼觸發了這個錯誤,而Qt瀏覽器演示沒有。任何人願意弄清楚爲什麼這是這種情況是歡迎:) :)