第 7 集:由 Bruce Dawson 拍摄,华盛顿州西雅图(2019 年 10 月)
上一集
有时,手动编译单个 Chromium 源文件会很有帮助, 不妨尝试使用编译器优化选项 来了解一些微妙的宏细节,或者尽可能减少 编译器 bug。
Chromium 开发者可以通过一些技巧找到并执行 会编译特定的源文件,并根据需要进行修改。
首先,前往输出目录,使用 autoninja(或 ninja)
使用 ^
后缀编译相关文件(以及任何依赖项)。
此后缀会告知 ninja 构建指定 file—version.o
的输出
在本示例中为 id。然后,触摸该文件并使用
-v
(详细)标志传递给 ninja:
在 Linux 或 OSX 上:
autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^
在 Windows cmd shell 中,^
是一个特殊字符,必须进行转义:
C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^
autoninja -v
命令的典型输出如下所示(
已剪辑):
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...
此命令可让您编译相关文件。为了获得经过预处理的 请按以下步骤操作:
在 Linux 或 OSX 上,移除末尾的 -o obj/base/base/version.o
代码块,
并添加 -E
。这会告知编译器将预处理后的文件输出到
stdout。
将输出重定向到文件,如下所示:
../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i
在 Windows 上,从开头移除 /showIncludes
选项(此时会显示
每个 #include
都有一个输出行),然后添加 /P
,以便
而不是进行编译结果将保存在
version.i
中的当前目录:
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P
现在,您可以检查预处理的文件,了解宏的实际运行方式, 或者进行实验性的编译器切换更改并重新编译,看看会出现什么情况。
其他资源
- Chrome 快速构建:如需了解更多构建优化提示 (主要介绍 Windows)。
- ETW:了解如何在 Chrome 中找出 Windows 性能问题 或在 build 中测试 - 请阅读 ETW(也称为 Xperf)文档。