背景
Chromeのバグを踏んだので、デバッガで見てみたくなった。
具体的には、marqueeタグのDOMのパースに失敗する不具合があり、Railsでturbolink経由でmarqueeタグを含むページに遷移すると表示が停止した。今日(2015/02/11)時点でChromiumでも発生するのでChromiumをビルドしてみた。
環境構築
基本的には公式サイトの手順をなぞるだけ。追加でWDKを入れる等の作業は不要。
http://www.chromium.org/developers/how-tos/build-instructions-windows
https://code.google.com/p/chromium/wiki/NinjaBuild
https://code.google.com/p/chromium/wiki/CommonBuildTasks
- Visual Studio 2013 Community Update 4をインストールする(MFCありにすること)
- depot_toolsを展開する(エクスプローラで展開する場合は右クリックメニューの「全て展開」を使うこと)
- depot_toolsのパスをPATHに追加する
- コマンドプロンプトを開く
- 環境変数を設定する(以下参照。set DEPOT_TOOLS_WIN_TOOLCHAIN=0 ...)
- 作業ディレクトリに移動
- fetch chromium
- (Still working onが表示されるので1時間くらい待つ)
(途中「git.batは内部コマンド〜」みたいなのが表示される)
以上でsrcディレクトリができているはず。
環境変数
日本語環境だとVC++(cl.exe)のcodepageが932固定で、BOMのないUTF-8のファイルをCP932としてコンパイルしようとしてwarningになるが、warningをエラーにするオプション(/WX)が指定されているためビルドに失敗する。そのため/WX-を追加した。
- DEPOT_TOOLS_WIN_TOOLCHAIN=0
- GYP_DEFINES=component=shared_library
- CPPFLAGS=/WX-
- GYP_GENERATORS=ninja,msvs-ninja
追加
Pythonが正しく動作しないので、以下のファイルを追加する。
import sys
sys.setdefaultencoding("cp437")
修正
一カ所、UTF-8文字でコメントが終わっている部分を削除する。
src\third_party\pdfium\fpdfsdk\include\fxedit\fxet_list.hの177行目から3行。
ビルド
- cd src
- ninja -C out\Debug chrome.exe
成功するとsrc/out/Debug/chrome.exeが生成される。
ビルドエラーが出るときはninja -v -C out\Debug chrome.exeで実行しているコマンドを見る。
実行
以下参照。
http://www.chromium.org/developers/how-tos/debugging-on-windows
chromeは複数のプロセスを起動するが、どこで止めるかわからないので、
chrome.exe --single-process
で起動する。現在は非推奨のオプションらしいが、これにより単体のプロセスで起動する。
適当なプロジェクト、または、src/chrome/chrome.slnを開く。
デバッグメニューからプロセスへアタッチを選び、x86のchrome.exeにアタッチする。
chrome.slnを開いたときには5分くらい待たされるので注意。
以下のページを開き、リンクを踏むとv8の中のASSERTで停止する(かもしれない)
https://hello-marquee.herokuapp.com/debug
参考
-
ChromiumのWindowsビルドがいつの間にか超絶簡単になっていた件
http://cygx.mydns.jp/blog/?arti=477 -
Depot tools fails to download Win8 SDK when user name contains non-ASCII characters.
https://code.google.com/p/chromium/issues/detail?id=391544