在windows下编译webkit
这是半年前在windows上编译、调试webkit的一些记录,可能比较乱。
windows下的webkit apple port编译的经验总结
- 主要参考webkit官网,在不清楚文档中每一步的作用前,老老实实的按照文档做
- 安装cygwin的时候要选择install from local directory, 否则会缺失包
- 在WebKitLibraries/win/tools/vsprops目录下面手动建立一个.svn文件夹(可以通过命令行建立)
- BuildLog是很好的参考资料,一旦出错,参考该log是比较容易找出问题的
- build-webkit 和 通过 vs编译事实上是一样的,因为build-webkit调用的是就是vs的命令行
- 另外dumprendertree 还是必须将vs编译的选项 treat warning as error改成 no,否则无法编译通过
- 在编译时还遇到一个问题,就是cl.exe报fatal错误,查了相关资料,后来没做任何处理,重新编译就可以了
Unhandled exception at 0x78145215 (msvcr80.dll) in Safari.exe: 0xC0000005: Access violation reading location 0x091bfffc.memcpy(data, characters, length * sizeof(UChar));+ dst 0x091c0034 "" unsigned char *+ src 0x089e9b10 ",甓" unsigned char *count 68945734 unsigned longmemcpy(data, characters, length * sizeof(UChar));+ data 0x091c0034 "" wchar_t *+ characters 0x089e9b10 "Ҷ" const wchar_t *length 34472867 unsigned int
+ string {m_ptr=0x091c0020 } WTF::PassRefPtr<WTF::StringImpl>
WebKit.dll!WebCore::HTMLFormElement::prepareSubmit(WebCore::Event * event=0x03417dc0) Line 265 C++WebKit.dll!WebCore::HTMLInputElement::defaultEventHandler(WebCore::Event * evt=0x03417dc0) Line 2207 + 0x13 bytes C++WebKit.dll!WebCore::Node::dispatchGenericEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2747 + 0x1b bytes C++WebKit.dll!WebCore::Node::dispatchEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2631 + 0x12 bytes C++WebKit.dll!WebCore::Node::dispatchUIEvent(const WTF::AtomicString & eventType={...}, int detail=1, WTF::PassRefPtr<WebCore::Event> underlyingEvent={...}) Line 2799 + 0x22 bytes C++WebKit.dll!WebCore::Node::defaultEventHandler(WebCore::Event * event=0x03ec3548) Line 3021 + 0x23 bytes C++WebKit.dll!WebCore::HTMLFormControlElementWithState::defaultEventHandler(WebCore::Event * event=0x03ec3548) Line 472 C++WebKit.dll!WebCore::HTMLInputElement::defaultEventHandler(WebCore::Event * evt=0x03ec3548) Line 2442 C++WebKit.dll!WebCore::Node::dispatchGenericEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2747 + 0x1b bytes C++WebKit.dll!WebCore::Node::dispatchEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2631 + 0x12 bytes C++WebKit.dll!WebCore::Node::dispatchMouseEvent(const WTF::AtomicString & eventType={...}, int button=0, int detail=1, int pageX=435, int pageY=73, int screenX=531, int screenY=178, bool ctrlKey=false, bool altKey=false, bool shiftKey=false, bool metaKey=false, bool isSimulated=false, WebCore::Node * relatedTargetArg=0x00000000, WTF::PassRefPtr<WebCore::Event> underlyingEvent={...}) Line 2924 C++WebKit.dll!WebCore::Node::dispatchMouseEvent(const WebCore::PlatformMouseEvent & event={...}, const WTF::AtomicString & eventType={...}, int detail=1, WebCore::Node * relatedTarget=0x00000000) Line 2833 C++WebKit.dll!WebCore::EventHandler::dispatchMouseEvent(const WTF::AtomicString & eventType={...}, WebCore::Node * targetNode=0x03ee9b48, bool __formal=true, int clickCount=1, const WebCore::PlatformMouseEvent & mouseEvent={...}, bool setUnder=true) Line 1845 + 0x23 bytes C++WebKit.dll!WebCore::EventHandler::handleMouseReleaseEvent(const WebCore::PlatformMouseEvent & mouseEvent={...}) Line 1573 + 0x2f bytes C++WebKit.dll!WebView::handleMouseEvent(unsigned int message=514, unsigned int wParam=0, long lParam=4784563) Line 1402 C++WebKit.dll!WebView::WebViewWndProc(HWND__ * hWnd=0x000d02da, unsigned int message=514, unsigned int wParam=0, long lParam=4784563) Line 2052 + 0x14 bytes C++user32.dll!77d18734()[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]user32.dll!77d18816()user32.dll!77d189cd()user32.dll!77d191f1()user32.dll!77d18a10()WinLauncher_debug.exe!wWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00020b14, int nCmdShow=1) Line 241 + 0x10 bytes C++WinLauncher_debug.exe!__tmainCRTStartup() Line 589 + 0x1c bytes Ckernel32.dll!7c817077()
WebKit.dll!WebCore::FrameLoader::submitForm(WTF::PassRefPtr<WebCore::FormSubmission> submission={...}) Line 367 C++WebKit.dll!WebCore::HTMLFormElement::submit(WebCore::Event * event=0x03417dc0, bool activateSubmitButton=true, bool lockHistory=false, WebCore::FormSubmissionTrigger formSubmissionTrigger=NotSubmittedByJavaScript) Line 312 C++WebKit.dll!WebCore::HTMLFormElement::prepareSubmit(WebCore::Event * event=0x03417dc0) Line 268 C++WebKit.dll!WebCore::HTMLInputElement::defaultEventHandler(WebCore::Event * evt=0x03417dc0) Line 2207 + 0x13 bytes C++WebKit.dll!WebCore::Node::dispatchGenericEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2747 + 0x1b bytes C++WebKit.dll!WebCore::Node::dispatchEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2631 + 0x12 bytes C++WebKit.dll!WebCore::Node::dispatchUIEvent(const WTF::AtomicString & eventType={...}, int detail=1, WTF::PassRefPtr<WebCore::Event> underlyingEvent={...}) Line 2799 + 0x22 bytes C++WebKit.dll!WebCore::Node::defaultEventHandler(WebCore::Event * event=0x03ec3548) Line 3021 + 0x23 bytes C++WebKit.dll!WebCore::HTMLFormControlElementWithState::defaultEventHandler(WebCore::Event * event=0x03ec3548) Line 472 C++WebKit.dll!WebCore::HTMLInputElement::defaultEventHandler(WebCore::Event * evt=0x03ec3548) Line 2442 C++WebKit.dll!WebCore::Node::dispatchGenericEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2747 + 0x1b bytes C++WebKit.dll!WebCore::Node::dispatchEvent(WTF::PassRefPtr<WebCore::Event> prpEvent={...}) Line 2631 + 0x12 bytes C++WebKit.dll!WebCore::Node::dispatchMouseEvent(const WTF::AtomicString & eventType={...}, int button=0, int detail=1, int pageX=435, int pageY=73, int screenX=531, int screenY=178, bool ctrlKey=false, bool altKey=false, bool shiftKey=false, bool metaKey=false, bool isSimulated=false, WebCore::Node * relatedTargetArg=0x00000000, WTF::PassRefPtr<WebCore::Event> underlyingEvent={...}) Line 2924 C++WebKit.dll!WebCore::Node::dispatchMouseEvent(const WebCore::PlatformMouseEvent & event={...}, const WTF::AtomicString & eventType={...}, int detail=1, WebCore::Node * relatedTarget=0x00000000) Line 2833 C++WebKit.dll!WebCore::EventHandler::dispatchMouseEvent(const WTF::AtomicString & eventType={...}, WebCore::Node * targetNode=0x03ee9b48, bool __formal=true, int clickCount=1, const WebCore::PlatformMouseEvent & mouseEvent={...}, bool setUnder=true) Line 1845 + 0x23 bytes C++WebKit.dll!WebCore::EventHandler::handleMouseReleaseEvent(const WebCore::PlatformMouseEvent & mouseEvent={...}) Line 1573 + 0x2f bytes C++WebKit.dll!WebView::handleMouseEvent(unsigned int message=514, unsigned int wParam=0, long lParam=4784563) Line 1402 C++WebKit.dll!WebView::WebViewWndProc(HWND__ * hWnd=0x000d02da, unsigned int message=514, unsigned int wParam=0, long lParam=4784563) Line 2052 + 0x14 bytes C++user32.dll!77d18734()[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]user32.dll!77d18816()user32.dll!77d189cd()user32.dll!77d191f1()user32.dll!77d18a10()WinLauncher_debug.exe!wWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00020b14, int nCmdShow=1) Line 241 + 0x10 bytes C++