ffx component explore
指令會啟動互動式殼層,方便您探索在目標裝置上執行的 Fuchsia 元件內部。
概念
ffx component explore
指令會啟動 Dash 程序,範圍限定於目標元件。透過這項 Dash 程序,你可以:
- 使用熟悉的 POSIX 指令,例如
ls
、cat
和grep
。 - 探索元件的傳入和傳出功能。
Dash 是 Fuchsia 專案其他工具 (例如 fx shell
、序列埠控制台、終端機視窗和 virtcon
) 先前使用的指令解譯器。Dash 為開發人員提供熟悉的體驗,例如 cd
和 ls
,方便在 Fuchsia 元件中瀏覽空間,例如:ffx component explore
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ ls
exposed
ns
out
runtime
svc
$
不過,與 fx shell
不同的是,命名空間只包含元件的傳入和傳出功能。這項限制表示您可以在與元件所見幾乎相同的環境中探索。
探索元件
如要連線至 Fuchsia 元件並啟動互動式殼層,請執行下列指令:
ffx component explore COMPONENT_IDENTIFIER
將 COMPONENT_IDENTIFIER 替換為目標元件的別名、網址或執行個體 ID。這項指令也接受這些 ID 的部分相符專屬項目。
以下範例指令會啟動互動式殼層 ($
),用於探索 /bootstrap/archivst
元件:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$
在本指南的所有範例中,主機終端的殼層提示會以 [host]$
表示,而元件互動式殼層的提示則會以 $
表示,不含 [host]
前置字元。換句話說,[host]$
表示指令是在主機的終端機上執行,而 $
則表示指令是在連線至目標元件的互動式殼層上執行。
本指南在大多數範例中,也會使用 /bootstrap/archivist
(即路徑名稱) 做為目標元件。實作時,這個引數應替換為目標元件的元件 ID。
探索元件可用的功能
如要探索目標元件的功能,請前往元件互動式殼層中的 /ns
目錄。/ns
目錄包含元件的命名空間,與元件所見的命名空間完全相同,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd ns
$ ls
config
events
pkg
svc
如要讓殼層的命名空間與元件命名空間相符,請使用 -l
(或 --layout
) 旗標,例如:
[host]$ ffx component explore /bootstrap/archivist -l namespace
Moniker: /bootstrap/archivist
$ ls
config
events
pkg
svc
如要進一步瞭解這些目錄,請參閱「ffx 元件探索中的命名空間根目錄是什麼?」。
探索元件公開的功能
/exposed
目錄包含從目標元件公開至父項的功能,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd exposed
$ ls
diagnostics
fuchsia.diagnostics.ArchiveAccessor
fuchsia.diagnostics.ArchiveAccessor.feedback
fuchsia.diagnostics.ArchiveAccessor.legacy_metrics
fuchsia.diagnostics.ArchiveAccessor.lowpan
fuchsia.diagnostics.LogSettings
fuchsia.logger.Log
fuchsia.logger.LogSink
探索元件提供的功能
如果目標元件在裝置上執行,/out
目錄會包含元件目前提供的所有功能,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd out
$ ls
diagnostics
svc
$ cd svc
$ ls
fuchsia.diagnostics.ArchiveAccessor
fuchsia.diagnostics.ArchiveAccessor.feedback
fuchsia.diagnostics.ArchiveAccessor.legacy_metrics
fuchsia.diagnostics.ArchiveAccessor.lowpan
fuchsia.diagnostics.LogSettings
fuchsia.logger.Log
探索元件的偵錯執行階段資料
如果目標元件在裝置上執行,/runtime
目錄會包含元件執行元件提供的偵錯資訊,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd runtime/elf
$ ls
job_id
process_id
process_start_time
$ cat process_id
2542
在元件的殼層中使用自訂指令列工具
您可以透過下列方式,將自訂指令列工具新增至元件的 Shell 環境:
為目前的工作階段新增工具
如要暫時新增工具,請使用 --tools
旗標將工具的套件網址傳遞至 ffx component explore
指令。
舉例來說,這會將 net-cli
工具組新增至 /core/network
元件的殼層,以供目前工作階段使用:
[host]$ ffx component explore /core/network --tools fuchsia-pkg://fuchsia.com/net-cli
Moniker: /core/network
$ net help
Usage: net <command> [<args>]
...
永久顯示工具
元件擁有者可以讓特定工具隨時供使用者使用。如要執行這項操作,請在元件資訊清單的 fuchsia.dash.launcher-tool-urls
構面中新增工具套件網址:
<rest of component manifest above>
facets: {
"fuchsia.dash.launcher-tool-urls": [ "fuchsia-pkg://fuchsia.com/magma-debug-utils" ],
},
當使用者在這個元件上執行 ffx component explore
時,指令會自動從資訊清單解析並載入工具。使用者必須執行可提供指定工具的套件伺服器,否則會看到警告。
[host]$ ffx component explore <moniker>
Moniker: <moniker>
Using tool URLs from component manifest: ["fuchsia-pkg://fuchsia.com/magma-debug-utils"]
$
在元件的殼層上以非互動方式執行指令
如要在元件的裝置端殼層中以非互動方式執行指令,並接收 stdout
、stderr
和結束代碼,請使用 -c
(或 --command
) 標記,例如:
[host]$ ffx component explore /bootstrap/archivist -c "cat /runtime/elf/process_id"
Moniker: /bootstrap/archivist
2542
附錄
為什麼我無法從父項查看子項元件?
Fuchsia 不允許從父項直接存取子項元件。先前,使用元件拓撲知識存取子項元件的功能,會導致工具脆弱,且依附於編碼系統拓撲知識的硬式編碼路徑。
建議改用下列替代方案:
- 從子項到父項元件明確傳送路徑功能。
- 探索子項元件本身。
這與 ffx 元件執行有何不同?
ffx component run
指令會在元件拓撲中,於指定集合內建立並啟動元件。不過,ffx component run
不提供任何互動功能。另一方面,ffx component explore
則可讓您以互動方式探索拓撲中的任何現有元件。總而言之,您可以使用 ffx component explore
瞭解剛使用 ffx component run
建立的元件。
ffx 元件探索中的命名空間根目錄為何?
根據預設,ffx component explore
指令會在命名空間根目錄 (/
) 建立虛擬檔案系統,其中包含下列目錄:
目錄 | 說明 |
---|---|
/.dash |
包含 Dash 必要的二進位檔。 |
/exposed |
包含所有公開功能。 |
/ns
|
包含元件的命名空間,與元件看到的命名空間完全相同。 |
/svc |
包含 Dash 所需的功能。 |
如果目標元件在裝置上執行,也會出現下列目錄:
目錄 | 說明 |
---|---|
/out |
包含元件目前提供的所有功能。 |
/runtime |
內含元件執行元件提供的偵錯資訊。 |
如果在 ffx component explore
中設定 --layout namespace
標記,殼層的命名空間會與元件的命名空間相符。
我可以使用 Dash Shell 存取 Zircon 控制代碼或發出 FIDL 呼叫嗎?
指令解譯器不直接支援這項操作。
如何為 ffx 元件探索功能提出要求?
請透過 ComponentFramework > Tools
Issue Tracker 元件提出所有功能要求。