调试 WebKit

WebKit.org提过如何使用 Xcode 调试 Safari,但写的有些晦涩。对于想在 Mac 上调试 WebCore——即 WebKit 的渲染内核——的人来说,可以使用以下方法。
  1. 下载 WebKit 源代码。最简单的方法是直接 clone GitHub 上的非官方镜像
  2. 打开根目录下的 Xcode Workspace。推荐修改 Products 和 Intermediates 的生成路径,使之与 WebKit 自带的编译脚本(Tools/Scripts/build-webkit)的默认生成路径匹配。具体做法:在 Workspace 窗口选择 File > Workspace Settings,点击 Advanced,选择 Custom、Relative to Workspace,并在 Products 和 Intermediates 两项中都输入 WebKitBuild。
  3. Build,直接点击左上角的开始键即可。这个时候可以叫个外卖,看一部电影,两个小时后首次编译应该就能完成。编译完成后会弹出 WebKit 自带的一个 MiniBrowser app。
  4. 为避免每次都要弹出 MiniBrowser,可以选择左上角的 Scheme 菜单,添加 WebKit2 项目里的 WebKit 库作为 Scheme。如此,点击开始键讲只构建 WebKit,不执行任何额外操作。
  5. 打开终端。输入
    defaults write com.apple.Safari IncludeInternalDebugMenu 1
    
    以在 Safari 菜单中显示 Debug 选项。
  6. 在终端中输入
    export DYLD_FRAMEWORK_PATH=$(path-to-WebKit)/WebKitBuild/Debug
    /Applications/Safari.app/Contents/MacOS/SafariForWebKitDevelopment
    
    第一行设置 DYLD_FRAMEWORK_PATH 为刚编译好的 WebKit 库的位置,第二行启动 Safari。启动的 Safari 将会使用新编译的 WebKit。
  7. 选择 Debug > Miscellaneous Flags > Show Web Process IDs In Page Titles,这样 Safari 会显示每个标签对应的 PID。该选项会影响我们上网用的 Safari。
  8. 在开发用的 Safari 里打开想要的页面,记住页面对应的 PID,打开 WebKit 的 Workspace,选择 Debug > Attach To Process,根据 PID 找到对应的进程。
  9. 设置断点,开始调试。刷新不会改变标签对应的进程。
编辑于 2017-04-02