调试 Chromium

out\Debug_* 目录下会自动生成 cef.sln 工程文件,用 VS 打开后即可附加调试

命令行参数

--log-level=1  # 日志输出等级 INFO = 0, WARNING = 1, LOG_ERROR = 2, LOG_FATAL = 3
--log-file     # 日志文件
--enable-logging=stderr  # 重定向日志到标准错误输出

对于 VERBOSE 等级日志,需要专门指定模块等级。参考 base/logging.h

--vmodule=profile=2,icon_loader=1,browser_*=3,*/chromeos/*=4  # 模块日志等级

编译 Chromium

参考 chromium 官方文档 https://www.chromium.org/developers/how-tos/get-the-code

depot_tools 环境参数

rem 禁止更新
set DEPOT_TOOLS_UPDATE=0

rem 使用本地工具链
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

rem python3 有问题,暂时使用 python2
set GCLIENT_PY3=0

rem 不使用 gn 工具
set CEF_USE_GN=0

rem Windows SDK 路径
set WINDOWSSDKDIR=C:\Program Files (x86)\Windows Kits\10

初始化 gclient 工程

gclient config --unmanaged --name=src https://chromium.googlesource.com/chromium/src.git

创建 gclient 工程

gclient sync
gclient sync --nohooks --no-history

设置 gn flags 参考:https://www.chromium.org/developers/gn-build-configuration#TOC-Goma

gn 命令可以列出所有可以设置的 flags 及其说明。

gn args out/mybuild --list

或者是指定 flags 的说明

gn args out/mybuild --list=is_component_build

代码获取

构建文档 https://chromium.googlesource.com/chromium/src/+/master/docs/get_the_code.md

先获取 depot_tool https://chromium.googlesource.com/chromium/tools/depot_tools/

禁用更新

set DEPOT_TOOLS_UPDATE=0

git 代理

git config --global http.proxy socks5://127.0.0.1:1080
git config --global https.proxy socks5://127.0.0.1:1080

修改 powershell 下载脚本 depot_tools\.cipd_impl.ps1,增加代理配置。

$proxy = (New-Object System.Net.WebProxy("http://127.0.0.1:8118"))
$proxy.UseDefaultCredentials = $true
$wc = (New-Object System.Net.WebClient)
$wc.Headers.Add("User-Agent", $UserAgent)
$wc.Proxy = $proxy

配置 .cipd_client.exe 代理

这个程序由 golang 编写,所以配置 golang 的代理即可。

set http_proxy=127.0.0.1:8118
set https_proxy=127.0.0.1:8118

修改 python 下载脚本 depot_tools\gsutil.py,增加代理配置。

proxy_handler = urllib.ProxyHandler({"http" : '127.0.0.1:8118', "https" : '127.0.0.1:8118'})
opener = urllib.build_opener(proxy_handler)
urllib.install_opener(opener)

windows 下注意设置 git

git config --global user.name "My Name"
git config --global user.email "my-name@chromium.org"
git config --global core.autocrlf false
git config --global core.filemode false
git config --global branch.autosetuprebase always

编译指定版本

git checkout -b branch_$BRANCH branch-heads/$BRANCH
gclient sync --with_branch_heads --with_tags

检出指定分支后需要使用 gclient 命令同步更新依赖。参考 编译指定分支

检出

使用 fetch 创建 gclient 项目并获取工程代码。

fetch chromium

如果不需要历史代码可以加上 --no-history 参数。不运行 hooks 加参数 --nohooks

模拟运行加参数 --dry-run

fetch chromium --no-history --nohooks

之后使用 gclient 保持更新。

gclient sync --no-history --nohooks --verbose

如果出现错误,部分依赖下载失败,则手动 clone 代码。

环境编译

依赖 VS ATLMFC 模块

PATH_TO_INSTALLER.EXE ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--includeRecommended

增加编译环境变量

rem 使用本地编译工具链
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

rem GYP 编译器配置
set GYP_MSVS_VERSION=2017
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community

rem GN 编译器配置
set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional

编译还依赖于 Debugging Tools for Windows,它包含在 Windows SDK 中。

但默认情况下 VS 在安装 Windows SDK 时并不会安装它。

需要在应用管理设置中选择修改 Windows Software Development Kit 包,增加选中 Debugging Tools For Windows。

编译

生成 ninja 工程。

gn gen out/Default

编译

autoninja -C out\Default chrome