上次更新日期:2019 年 9 月 3 日
用於分析 Fuchsia 中 Rust 程式二進位檔大小和組合的操作說明。範例
使用 //src/diagnostics/archivist
套件。
必要條件
貨物
這些操作說明涵蓋安裝及使用 cargo-bloat 這項 Rust 專案工具 靈感來自 Bloaty McBloatface。
如何安裝:
cargo install cargo-bloat --features regex-filter [--force]
如果您安裝的是舊版本,或想將規則運算式篩選支援功能加入現有的現有版本
安裝,你可能需要新增 --force
。
法哥
這個範例使用 crates.io 的 Cargo 子指令,因此您必須安裝 Fargo。
執行 fx build
個
接著,在 Fuchsia 來源目錄中執行 fx build
。
建立 Cargo.toml
按照操作說明為專案產生 Cargo.toml
。
使用 Fargo 建構
cargo-bloat
目前不支援傳送任意資訊清單路徑,您需要 cd
才能
產生含有產生的 Cargo.toml
的目錄:
cd $FUCHSIA_DIR/src/diagnostics/archivist
確保您能透過該目錄使用 Fargo 產生發布子版本:
fargo build --release
先從平原遠地執行發布子版本,因為 Cargo-bloat 會避免發生任何建構錯誤。
使用貨物燃料評估尺寸貢獻
我們確定該遠徵可以為目標產生發布二進位檔後,請執行 cargo-bloat:
fargo cargo bloat -- --release -n 5
Compiling ...
Analyzing .../src/../out/cargo_target/x86_64-unknown-fuchsia/release/archivist
File .text Size Crate Name
1.7% 4.5% 38.0KiB regex <regex::exec::ExecNoSync as regex::re_trait::Regular...
1.0% 2.5% 21.4KiB regex_syntax regex_syntax::ast::parse::ParserI<P>::parse_with_comments
0.8% 2.1% 17.7KiB fuchsia_component? <fuchsia_component::server::ServiceFs<ServiceObjTy> as...
0.4% 0.9% 8.0KiB regex regex::re_unicode::Regex::shortest_match_at
0.4% 0.9% 7.8KiB std _ZN9libunwind10CFI_ParserINS_17LocalAddressSpaceEE17paI...
33.8% 89.0% 751.9KiB And 6152 smaller methods. Use -n N to show more.
38.0% 100.0% 844.8KiB .text section size, the file size is 2.2MiB
務必在發布時測量二進位檔大小,因為要預測 以及對偵錯版本所做的變更
-n 5
引數的輸出上限為 5 行。針對所有選項執行 cargo bloat --help
,並
下文將說明幾種常用參數
按照 Crate 將函式分組
使用 --crates
旗標,依據來源 Crate 估計值將布料分析分組:
fargo cargo bloat -- --release -n 5 --crates
Compiling ...
Analyzing .../src/../out/cargo_target/x86_64-unknown-fuchsia/release/archivist
File .text Size Crate
13.3% 34.9% 294.8KiB std
6.3% 16.7% 141.0KiB regex
5.0% 13.2% 111.3KiB regex_syntax
2.1% 5.5% 46.1KiB fidl
1.8% 4.7% 39.5KiB json5
9.6% 25.1% 212.2KiB And 64 more crates. Use -n N to show more.
38.0% 100.0% 844.8KiB .text section size, the file size is 2.2MiB
Note: numbers above are a result of guesswork. They are not 100% correct and never will be.
將泛型函式歸因於原始 Crate 是一項容易出錯的啟發式分析與 請使用篩選器和精細輸出內容來細查,確認 crate 分組中是否有任何發現 輸出內容
篩選函式
如要深入瞭解特定 Crate 中承載的來源,您可以依來源 Crate 名稱篩選。
方法是使用 --filter
旗標,對函式名稱 (已啟用功能旗標) 執行規則運算式:
fargo cargo bloat -- --release -n 5 --filter regex_syntax
Compiling ...
Analyzing .../src/../out/cargo_target/x86_64-unknown-fuchsia/release/archivist
File .text Size Crate Name
1.0% 2.5% 21.4KiB regex_syntax regex_syntax::ast::parse::ParserI<P>::parse_with_comments
0.3% 0.8% 6.4KiB regex_syntax regex_syntax::ast::parse::ParserI<P>::parse_escape
0.2% 0.5% 3.8KiB regex_syntax <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast...
0.1% 0.2% 1.8KiB regex_syntax <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast...
0.1% 0.2% 1.7KiB regex_syntax regex_syntax::unicode::class
3.4% 9.0% 76.2KiB And 698 smaller methods. Use -n N to show more.
5.0% 13.2% 111.2KiB filtered data size, the file size is 2.2MiB