31. Can't debug OSX WebKit MiniBrowser with GDB - WebKit porting to Mona OS

Since Mona has a poor debug feature, we want a stable debuggable WebKit. I think the OSX WebKit MiniBrowser is suitable for this usage.

Building

% Tools/Scripts/set-webkit-configuration --debug
% make -C Source/JavaScriptCore
% make -C Source/JavaScriptGlue
% make -C Source/ThirdParty/ANGLE
% make -C Source/WebCore
% make -C Source/WebKit
% make -C Source/WebKit2
% make -C Tools/MiniBrowser

GDB

It doesn't break on the breakpoint. Why?

% gdb --args ./WebKitBuild/Debug/MiniBrowser.app/Contents/MacOS/MiniBrowser
GNU gdb 6.3.50-20050815 (Apple version gdb-1515) (Sat Jan 15 08:33:48 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries ......... done

### set Breakpoint
(gdb) b /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142
No source file named /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (/Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142) pending.
(gdb) r
Starting program: /Users/taro/WebKit.OSX/WebKitBuild/Debug/MiniBrowser.app/Contents/MacOS/MiniBrowser 
Reading symbols for shared libraries .++++++++............................................................................................ done
Breakpoint 2 at 0x102bff703: file /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp, line 142.
Breakpoint 3 at 0x102bff8bf: file /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp, line 142.
warning: Multiple breakpoints were set.
Use the "delete" command to delete unwanted breakpoints.
Pending breakpoint 1 - "/Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142" resolved
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
RenderText /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142 ## should be break HERE!
RenderText /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142
RenderText /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142
RenderText /Users/taro/WebKit.OSX/Source/WebCore/rendering/RenderText.cpp:142
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineFlowBox.cpp:998
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineTextBox.cpp:472
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineFlowBox.cpp:998
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineTextBox.cpp:472
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineFlowBox.cpp:998
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineTextBox.cpp:472
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineFlowBox.cpp:998
paint /Users/taro/WebKit.OSX/Source/WebCore/rendering/InlineTextBox.cpp:472

How to Debug

Hajime Morrita taught me how to debug. WebKit is multi processes model, so we have to attach to another process.

% WebKitBuild/Debug/MiniBrowser.app/Contents/MacOS/MiniBrowser &
% pgrep -lf WebProcess.app
21697 /Users/taro/WebKit.OSX/WebKitBuild/Debug/WebKit2.framework/WebProcess.app/Contents/MacOS/WebProcess /Users/taro/WebKit.OSX/WebKitBuild/Debug/WebKit2.framework/WebKit2 -type webprocess -servicename com.apple.WebKit.WebProcess-21680-0x108647440 -localization en_US
% gdb -p 21697