run fidlcat on given target.
Runs fidlcat in the given configuration; currently, fidlcat logs all FIDL chatter from the given target executable. Starts the debug agent on the proposed target, and closes the debug agent on exit. CAUTION: This support is experimental, and invocation strategy is likely to change. The component launching configuration is *especially* likely to go away over time. TROUBLESHOOTING TIPS: - Remember to use "fx set-device" when working with multiple devices. - This scripts by default will mute the SSH connection stdout/stderr, so any errors triggered by it won't appear. Use the --debug-mode flag to see the debug log's from the debug agent and fidlcat. - This scripts uses the tool "nc" for testing TCP connections. Check that it is in $PATH and that it works. Usage: fx fidlcat [(--port|-p) <PORT>] [--with-symbol-server] [--debug-mode] [--symbol-path=<path>] [--fidl-ir-path=<path>] [--gdb] [--from=<source>] [--to=<path>] [--format=<output>] [--with-process-info] [--stack=<value>] [--syscalls=<regexp>] [--exclude-syscalls=<regexp>] [--messages=<regexp>] [--exclude-messages=<regexp>] [--trigger=<regexp>] [--dump-messages] [--verbose=<value> | --quiet=<value>] [--log-file <path>] [--stay-alive] [--remote-pid=<pid>] [--remote-name=<name>] [--extra-name=<name>] [run <component specification>] System options: --port Port the debug agent will be listening on. Will use 2345 by default. --with-symbol-server Connect to the symbol server. The first time you use this option, fidlcat will give you a link to an authentication page. You then have to use the generated key to authenticate. --debug-mode Whether the debug agent's debug logs should be shown. --symbol-path=<path> An extra location where fidlcat can find debug symbols. --fidl-ir-path=<path> An extra location where fidlcat can find FIDL compiled files. --gdb Launch fidlcat using gdb. This is only useful to be able to debug fidlcat. When this option is used, the string you have to type within gdb to launch fidlcat is printed and then, gdb is launched. This option only works if you have the unstripped version of fidlcat. Input options: --from=<source> This option must be used at most once. Source can be: --from=device This is the default input. The input comes from the live monitoring of one or several processes. At least one of '--remote-pid', '--remote-name', 'run' must be specified. --from=<path> The input comes from a previously recorded session (protobuf format). Path gives the name of the file to read. If path is '-' then the standard input is used. Session save option: --to=<path> The session is saved to the specified file (binary protobuf format). When a session is saved, you can replay it using "--from=<path>". The raw data is saved. That means that the data saved is independent from what is displayed. Format (output) options: --format=<output> You can use one of this output formats: --format=pretty The session is pretty printed (with colors). This is the default output if --with is not used. --format=json The session is printed using a json format. --format=textproto The session is printed using a text protobuf format. --format= Nothing is displayed on the standard output (this option only makes sense when used with --to=<path> or with --with). When there is no output, fidlcat is much faster (this is better when you want to monitor real time components). This is the default output is --with is used. Extra generation: These options can be used several times. --with=summary At the end of the session, a summary of the session is displayed on the standard output. --with=summary=<path> Like --with=summary but the result is stored into the file specified by <path>. --with=top At the end of the session, generate a view that groups the output by process, protocol, and method. The groups are sorted by number of events, so groups with more associated events are listed earlier. --with=top=<path> Like --with=top but the result is stored into the file specified by <path>. Display options: --with-process-info Display the process name, process id and thread id on each line (useful for grep). --stack=<value> Define the amount of stack frame to display 0: none (default value) 1: call site (1 to 4 levels) 2: full stack frame (adds some overhead) --syscalls=<regexp> A regular expression which selects the syscalls to decode and display. Can be passed multiple times. By default, only zx_channel_.* syscalls are displayed. To display all the syscalls, use: --syscalls ".*" --exclude-syscalls=<regexp> A regular expression which selects the syscalls to not decode and display. Can be passed multiple times. To be displayed, a syscall must verify --syscalls and not verify --exclude-syscalls. To display all the syscalls but the zx_handle syscalls, use: --syscalls ".*" --exclude-syscalls "zx_handle_.*" --messages=<regexp> A regular expression which selects the messages to display. To display a message, the method name must satisfy the regexp. This option can be specified multiple times. Message filtering works on the method's fully qualified name. --exclude-messages=<regexp> A regular expression which selects the messages to not display. If a message method name satisfy the regexp, the message is not displayed (even if it satisfies --messages). This option can be specified multiple times. Message filtering works on the method's fully qualified name. --trigger=<regexp> Start displaying messages and syscalls only when a message for which the method name satisfies the filter is found. This option can be specified multiple times. Message filtering works on the method's fully qualified name. --dump-messages Always does a hexadecimal dump of the messages even if we can decode them. Logging options: --verbose=<value> The log verbosity. Legal values are "info", "warning", "error", "fatal", or a number, starting from 0. Extra verbosity comes with higher levels. --quiet=<value> The log verbosity. Legal values are "info", "warning", "error", "fatal", or a number, starting from 0. Extra verbosity comes with lower levels. --log-file=<path> The log file destination. --stay-alive Don't quit fidlcat when all the monitored processes have ended. This allows to keep monitoring upcoming process. At the end you have to use control-c to quit fidlcat. This is useful when you monitor a process and restart this process. Monitoring options: --remote-pid=<pid> The koid of the remote process to trace. --remote-name=<name> A set of comma-separated regexes. Fidlcat will monitor all existing and future processes whose names match one of the regexes. Can be provided multiple times for multiple regexes. --extra-name=<name> Like --remote-name, it monitors some processes. However, for these processes, monitoring starts only when one of of the "--remote-name" process is launched. Also, fidlcat stops when the last "--remote-name" process stops (even if some "--extra-name" processes are still monitored). run <component spec> A token indicating that you want to invoke and trace the following component. The component is specified with either a bash regex that matches a component URL known to the build, or a full component URL not known to your build, but available to your target. Flags after -- are parsed by fidlcat. Example usage: # Attaches to the process with the given pid on the target: fx fidlcat --remote-pid=4755 # Launches the echo client, and monitors its FIDL chatter: fx fidlcat run fuchsia-pkg://fuchsia.com/echo_client_cpp#meta/echo_client_cpp.cmx # Also launches the echo client, and monitors its FIDL chatter: fx fidlcat run echo_client_cpp.cmx # Will trace existing and future processes whose name contains "echo_client" fx fidlcat --remote-name=echo_client All options --remote-pid, --remote-name, --extra-name and, run can be used together. However, run must always be the last one. When --remote-name and run are used together, only processes which match --remote-name are monitored. Examples (echo_server is launched by echo_client): # run and monitor echo_client. fx fidlcat run echo_client_cpp.cmx # run and monitor echo_client. fx fidlcat --remote-name=echo_client run echo_client_cpp.cmx # run echo_client and monitor echo_server. fx fidlcat --remote-name=echo_server run echo_client_cpp.cmx # run echo_client and monitor echo_client and echo_server. fx fidlcat --remote-name=echo run echo_client_cpp.cmx # run echo_client and monitor echo_client and echo_server. fx fidlcat --remote-name=echo_client --remote-name=echo_server run echo_client_cpp.cmx