macでchromiumをビルドしてxcodeでデバッグ
新しいmacbook proを買ってchromiumをビルドしたので作業を記録
※chromiumの開発者はubuntuでビルドすることが多いみたいです
環境
2.2 GHz core i7, メモリ 16GB
デバッグビルドするとソース・バイナリ合わせて100GBくらいになるので空き容量が必要
ソースコードの取得
公式ドキュメント通りにやればOK
Checking out and building Chromium for Mac
ソースコードの取得。数時間かかる
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $ export PATH="$PATH:/path/to/depot_tools" $ mkdir chromium && cd chromium $ git config --global core.precomposeUnicode true $ fetch chromium $ cd src
ビルド
chromiumはninjaというビルドツールが使われている
ここではビルドはninjaで行い、デバッグはxcodeで行う
gnはgoogleで使われているmakeみたいなツールらしい
$ gn gen out/gn --ide=xcode
設定ファイルを書く。
$ vim out/gn/args.gn $ cat out/gn/args.gn # Build arguments go here. # See "gn args <out_dir> --list" for available build arguments. dcheck_always_on = true is_component_build = true
ビルド。数時間かかる
$ autoninja -C out/gn chrome
エラー1
... ../../third_party/blink/renderer/platform/shared_buffer.h:38:10: fatal error: 'third_party/blink/renderer/platform/wtf/std_lib_extras.h' file not found #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. [27541/36317] CXX obj/third_party/blink/renderer/bindings/core/v8/bindings_core_impl/v8_custom_element_value_setter.o ninja: build stopped: subcommand failed.
対処
$ gclient sync
エラー2
... fatal error: cannot open file '/Users/knagashi/work/chromium/src/out/gn/../../third_party/skia/include/core/SkPostConfig.h': Too many open files 1 error generated.
対処
$ ulimit -n 10000
ビルドに成功すると実行ファイルができる
$ out/gn/Chromium.app/Contents/MacOS/Chromium
(aliasをchromiumに設定)
デバッグ
https://zhuanlan.zhihu.com/p/24911872
(この人のブログはすごく面白い。わざわざmacでビルドしようと思ったのはこの人に影響されたせい)
chromiumのファイル数はとても多いので、インデックスをしないように設定する
ちなみにインデックスすると2時間くらいかかる。
$ defaults write com.apple.dt.XCode IDEIndexDisable 1
xcodeを開く。このとき、"Automatically Create Schemes"を選択する
$ open out/gn/all.xcworkspace
ブレークポイントを設定する。
なんでもいいけど、DocumentLoader::DataReceivedとゆうメソッドに設定する。
このメソッドはHTTPレスポンスを処理し、HTMLのパーサーに渡す
chromiumをターミナルから起動する。
このとき、プロセスのPIDが表示される(以下の39954)ので、あとでxcodeからアタッチする
$ chromium --renderer-startup-dialog ... [39954:775:0108/232111.152967:ERROR:content_switches_internal.cc(110)] Renderer (39954) paused waiting for debugger to attach. Send SIGUSR1 to unpause. ...
xcodeの上のメニューから Debug > Attach to Processを選択し、さっき起動したプロセスを選ぶ
起動したchromiumで何かしらのサイトを開く。
twitter.comを開いた結果
dataとゆう引数にtwitterのHTMLが入っていることがわかる