blob: ac8c34dce9bfb117216fdc8ad110b09cd854c34d [file] [log] [blame]
# Copyright 2018 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.
# This library is used by:
# * debug
# * fidlcat
# Checks to see if a debug agent is listening by knocking on the agent
# port with nc(1).
# 1: agent port
# 2: number of tries
check_for_agent() {
local port="$1"
local num_tries="$2"
while ((num_tries--)); do
if nc -w5 -z "$(get-fuchsia-device-addr)" "${port}"; then
return 0
fi
sleep 1
done
return 1
}
# Starts a debug agent on the target if it's not there.
# 1: agent port
# 2: agent unwind flag
# 3: agent output path
# The agent is started in a subprocess that must be waited upon.
launch_debug_agent() {
local port="$1"
local unwind_flag="$2"
local agent_out="$3"
local debug_agent_url="fuchsia-pkg://fuchsia.com/debug_agent#meta/debug_agent.cmx"
# See if the debug agent is already there.
echo "Checking for debug agent on $(get-device-addr-resource):${port}."
if fx-command-run "shell" "ps" | grep "debug_agent.cmx" > /dev/null; then
echo "Found agent already running."
return 0
fi
# Leave the SSH connection open. Will be closed on script end.
# We branch out on whether the user used the verbose-agent flag. If so, we
# redirect the debug agent output to /dev/null.
echo -e "Debug agent not found. Starting one."
fx-command-run "shell" "run" "${debug_agent_url}" "--port=${port}" "${unwind_flag}" > "${agent_out}" 2>&1 &
# Bug: 49094, with serve-remote this can not detect a running
# agent the way that check_for_agent attempts to, we sleep a very
# short time to give the agent a chance to actually start. Ideally
# zxdb(1) should handle this instead.
sleep 0.5
# Wait for the debug agent to start.
if check_for_agent "${port}" 10; then
return 0
else
fx-error "Timed out trying to find the Debug Agent."
return 1
fi
}