在macOS上面编译与调试Chromium


编译chromium

系统要求

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

安装 depot_tools

下载 depot_tools

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

将depot_tools添加到环境变量PATH中

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

获取chromium源码

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

bash
mkdir chromium && cd chromium

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

bash
caffeinate fetch chromium

配置build参数

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

bash
gn gen out/Default --ide=xcode

添加dsym配置

add enable_dsyms = true out/Default/args.gn

编译Chromium

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

bash
autoninja -C out/Default chrome

运行编译好的Chromium

bash
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

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

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

    xcode
    xcode

  3. 设置断点

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

    breakpoint
    breakpoint

  4. attach到Chromium进程

    Debug -> Attach to Process -> Chromium

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

    attach
    attach

  5. 调试Chromium

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

    debug
    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 !
评论
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8