第 7 集:華盛頓州西雅圖的 Bruce Dawson (2019 年 10 月)
上一集
有時候,手動編譯單一 Chromium 來源檔案會有幫助。 不妨透過編譯器最佳化選項進行實驗,以預先處理 以便瞭解某些微妙的巨集詳情,或者 編譯器錯誤。
以下提供一些秘訣,可讓 Chromium 開發人員尋找並執行 編譯特定的來源檔案,並視需要進行修改。
請先前往輸出目錄,並使用 autoninja (或 ninja) 執行以下作業:
使用 ^
後置字串編譯所需檔案 (以及任何依附元件)。
此後置字串會告知 ninja 建構指定 file—version.o
的輸出內容
在本例中接著輕觸檔案,並使用以下指令再次編譯 (僅限該檔案)
-v
(詳細資訊) 標記變更為 ninja:
Linux 或 OSX:
autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^
在 Windows cmd 殼層 ^
中,是特殊字元,必須逸出:
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 效能問題 或建構過程中,請參閱 ETW (又稱 Xperf) 文件。