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

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

Đôi khi, bạn nên tự mình biên dịch một tệp nguồn Chromium, có thể là để thử nghiệm các tuỳ chọn tối ưu hoá của trình biên dịch, để xử lý trước vào 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 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ể rồi sửa đổi nếu cần.

Bắt đầu bằng cách chuyển tới thư mục đầu ra của bạn và sử dụng autoninja (hoặc ninja) để biên dịch tệp bạn quan tâm (và mọi phần phụ thuộc) bằng hậu tố ^. Hậu tố này yêu cầu ninja tạo kết quả 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 (chỉ riêng 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 shell cmd của Windows, ^ là một ký tự đặc biệt và phải có ký tự thoát:

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

Kết quả thông thường của lệnh autoninja -v sẽ có dạng như sau (đáng kể đã cắt):

..\..\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. Để xử lý trước đầu ra, hãy sử dụng các bước sau:

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

Chuyển hướng đầu ra đến 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 từ đầ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 trong 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 thay đổi chuyển đổi trình biên dịch thử nghiệm và biên dịch lại để xem điều gì sẽ xảy ra.

Tài nguyên khác

  • Bản dựng Chrome nhanh: Để biết 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 được gọi là Xperf).