Chromium Chronicle #7: Nguồn xử lý trước

Tập 7: của Bruce Dawson tại Seattle, Washington (tháng 10 năm 2019)
Các tập trước

Đôi khi, bạn nên biên dịch thủ công một tệp nguồn Chromium riêng lẻ, có thể là thử nghiệm các tuỳ chọn tối ưu hoá trình biên dịch, xử lý trước tệp đó thành một tệp duy nhất để hiểu một số chi tiết macro nhỏ hoặc để giảm thiểu lỗi của trình biên dịch.

Một vài thủ thuật sẽ cho phép nhà phát triển Chromium tìm và thực thi lệnh biên dịch một tệp nguồn cụ thể, cùng với các nội dung sửa đổi nếu cần.

Bắt đầu bằng cách chuyển đến thư mục đầu ra và sử dụng autoninja (hoặc ninja) để biên dịch tệp quan tâm (và mọi phần phụ thuộc) bằng cách sử dụng hậu tố ^. Hậu tố này yêu cầu ninja tạo đầu ra của file—version.o được chỉ định trong trường hợp này. Sau đó, chạm vào tệp và biên dịch lại tệp (và chỉ tệp đó) bằng cờ -v (chi tiết) cho ninja:

Trên Linux hoặc OSX:

autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^

Trong lệnh shell cmd của Windows, ^ là một ký tự đặc biệt và phải được thoát:

C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^

Kết quả điển hình của lệnh autoninja -v có dạng như sau (đã cắt giảm đáng kể):

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...

Lệnh này cho phép bạn biên dịch tệp bạn quan tâm. Để nhận đầu ra được xử lý trước, hãy làm theo các bước sau:

Trên Linux hoặc OSX, hãy xoá khối -o obj/base/base/version.o khỏi cuối và thêm -E. Lệnh này yêu cầu trình biên dịch in tệp đã xử lý trước vào stdout.

Chuyển hướng đầu ra sang một tệp, như sau:

../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i

Trên Windows, hãy xoá tuỳ chọn /showIncludes khỏi đầu (tuỳ chọn này in một dòng đầu ra cho mỗi #include) rồi thêm /P để xử lý trước tệp thay vì biên dịch tệp. Kết quả sẽ được lưu vào thư mục hiện tại trong version.i:

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P

Bây giờ, bạn có thể kiểm tra tệp đã xử lý trước để xem các macro đang thực sự làm gì, hoặc thực hiện các thay đổi thử nghiệm đối với trình biên dịch chuyển đổi và biên dịch lại để xem điều gì sẽ xảy ra.

Nguồn thông tin khác

  • Các bản dựng Chrome nhanh: Để xem thêm mẹo tối ưu hoá bản dựng (tập trung vào Windows).
  • ETW: Tìm hiểu cách tìm các vấn đề về hiệu suất của Windows (trong Chrome hoặc trong bản dựng) bằng cách đọc tài liệu về ETW (còn gọi là Xperf).