在macOS上面编译与调试Chromium


编译chromium

系统要求

  1. A mac, intel or M1
  2. Xcode
  3. The macOS SDK. 运行下面的命令来检测是不是已经安装
    ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs
  4. An APFS-formatted volume (macOS系统的默认文件系统格式)

安装 depot_tools

下载 depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

将depot_tools添加到环境变量PATH中

export PATH="$PATH:/path/to/depot_tools"

获取chromium源码

新建chromium目录来放置源码, 需要大概100G的空间,如果没有,最后会因为空间不足而失败。

mkdir chromium && cd chromium

拉取源码, 这个取决于你的网络速度,一般要几个小时,所以可以放到晚上拉取, 还有如果失败要重试,使用gclient sync命令

caffeinate fetch chromium

配置build参数

通过GN工具生成.ninja配置文件,通过ninja工具编译

gn gen out/Default --ide=xcode

添加dsym配置

add enable_dsyms = true out/Default/args.gn

编译Chromium

有5万多个文件需要编译,一般也需要3个小时以上,所以也可以放到晚上编译。

autoninja -C out/Default chrome

运行编译好的Chromium

out/Default/Chromium.app/Contents/MacOS/Chromium

xcode调试Chromium

  1. 关闭xcode的source control

    xcode -> preferences -> source control -> uncheck Enable Source Control

    不关闭这个会导致xcode卡死,因为chromium的源码太大了,xcode会一直在扫描源码,导致卡死。

  2. 生成Xcode项目

    上面已经通过--ide=xcode参数生成了Xcode项目,所以可以直接打开out/Default/all.xcodeproj项目

调试Chromium

  1. 打开Chromium

    ./out/Debug/Chromium.app/Contents/MacOS/Chromium
  2. 打开xcode项目

    直接打开out/Default/all.xcodeproj项目, 直接选择automatically create schemes.

    xcode

  3. 设置断点

    chrome/browser/ui/views/tabs/new_tab_button.cc文件中的void NewTabButton::NotifyClick(const ui::Event& event) 函数中设置断点

    breakpoint

  4. attach到Chromium进程

    Debug -> Attach to Process -> Chromium

    这个需要等一会,等attach完成后,就可以在xcode中调试Chromium了。

    attach

  5. 调试Chromium

    在Chromium中打开一个新的tab,就会触发断点,然后就可以在xcode中调试了,如下图.

    debug

Reference

  1. Checking out and building Chromium for Mac
  2. Debugging Chromium on macOS
  3. debug chromium with lldb under Mac OSX
  4. Chromium源码学习(1)—— 构建,调试

文章作者: Payne Fu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Payne Fu !
评论