| #!/bin/bash |
| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| ### 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 --verbose-agent flag to see |
| ## the output. |
| ## - 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>] [--remote-pid <pid>|--remote-name <names>|run <component URL>] |
| ## |
| ## --port Port the debug agent will be listening on. Will use 2345 |
| ## by default. |
| ## --verbose-agent Whether the debug agent's stdout/stderr should be shown. |
| ## --remote-pid The koid of the remote process to trace |
| ## --remote-name A set of comma-separated regexes. When a process |
| ## whose name matches one of the regexes starts, fidlcat |
| ## will trace it. Can be provided multiple times for |
| ## multiple regexes. |
| ## run a token indicating that you want to invoke and trace the |
| ## following component URL. |
| ## |
| ## 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 |
| ## |
| ## # Will trace the next process that starts whose name contains "echo_client" |
| ## fx fidlcat --remote-name echo_client |
| |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $? |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../contrib/lib/debug.sh || exit $? |
| |
| agent_out="/dev/null" |
| |
| while [[ $# -gt 0 ]]; do |
| case "$1" in |
| --help|-h) |
| fx-command-help |
| exit 0 |
| ;; |
| --port|-p) |
| shift |
| port="$1" |
| ;; |
| --verbose-agent|-va) |
| agent_out="/dev/stdout" |
| ;; |
| --remote-pid) |
| break # Remaining flags are passed to fidlcat |
| ;; |
| --remote-name) |
| break # Remaining flags are passed to fidlcat |
| ;; |
| run) |
| break # Remaining flags are passed to fidlcat |
| ;; |
| --) |
| shift |
| break # Remaining flags are passed to fidlcat |
| ;; |
| *) |
| echo "Invalid flag $1" |
| exit 1 |
| esac |
| shift |
| done |
| |
| target=$(get-fuchsia-device-addr) |
| |
| if [[ -z "${port}" ]]; then |
| port=2345 |
| fi |
| |
| launch_debug_agent |
| |
| # We start the client with the flag that tells it to quit the agent when zxdb quits. |
| "${FUCHSIA_BUILD_DIR}/tools/fidlcat" \ |
| "--connect" "[${target}]:${port}" \ |
| "--fidl-ir-path" @"${FUCHSIA_BUILD_DIR}"/all_fidl_json.txt \ |
| "-s" "${FUCHSIA_BUILD_DIR}" \ |
| "-s" "${ZIRCON_BUILDROOT}" \ |
| "-s" "${BUILDTOOLS_CLANG_DIR}/lib/debug" \ |
| --pretty-print \ |
| $@ |