From 292b9a11830070c64a733335a35558297ee685db Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Fri, 8 May 2026 13:56:44 -0500 Subject: [PATCH] Pass stdout to ThrowIfFailed in ListDevicesAsync, ListAvdsAsync, ListAvdNamesAsync For list commands (adb devices -l, avdmanager list avd, emulator -list-avds), the primary diagnostic output on failure goes to stdout, not stderr. Omitting stdout from ThrowIfFailed means the InvalidOperationException contains only the (possibly empty) stderr, losing the most useful diagnostic. Follows the convention already used in ListReversePortsAsync (AdbRunner.cs:323). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Xamarin.Android.Tools.AndroidSdk/Runners/AdbRunner.cs | 2 +- .../Runners/AvdManagerRunner.cs | 2 +- src/Xamarin.Android.Tools.AndroidSdk/Runners/EmulatorRunner.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Runners/AdbRunner.cs b/src/Xamarin.Android.Tools.AndroidSdk/Runners/AdbRunner.cs index 0eadc70e..e46900ed 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Runners/AdbRunner.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Runners/AdbRunner.cs @@ -58,7 +58,7 @@ public virtual async Task> ListDevicesAsync (Cancel var psi = ProcessUtils.CreateProcessStartInfo (adbPath, "devices", "-l"); var exitCode = await ProcessUtils.StartProcess (psi, stdout, stderr, cancellationToken, environmentVariables).ConfigureAwait (false); - ProcessUtils.ThrowIfFailed (exitCode, "adb devices -l", stderr); + ProcessUtils.ThrowIfFailed (exitCode, "adb devices -l", stderr, stdout); var devices = ParseAdbDevicesOutput (stdout.ToString ().Split ('\n')); diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Runners/AvdManagerRunner.cs b/src/Xamarin.Android.Tools.AndroidSdk/Runners/AvdManagerRunner.cs index 954f1379..cb0dcfda 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Runners/AvdManagerRunner.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Runners/AvdManagerRunner.cs @@ -43,7 +43,7 @@ public async Task> ListAvdsAsync (CancellationToken cance logger.Invoke (TraceLevel.Verbose, "Running: avdmanager list avd"); var exitCode = await ProcessUtils.StartProcess (psi, stdout, stderr, cancellationToken, environmentVariables).ConfigureAwait (false); - ProcessUtils.ThrowIfFailed (exitCode, "avdmanager list avd", stderr); + ProcessUtils.ThrowIfFailed (exitCode, "avdmanager list avd", stderr, stdout); return ParseAvdListOutput (stdout.ToString ()); } diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Runners/EmulatorRunner.cs b/src/Xamarin.Android.Tools.AndroidSdk/Runners/EmulatorRunner.cs index 4a4bd6e8..90233611 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Runners/EmulatorRunner.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Runners/EmulatorRunner.cs @@ -102,7 +102,7 @@ public async Task> ListAvdNamesAsync (CancellationToken ca logger.Invoke (TraceLevel.Verbose, "Running: emulator -list-avds"); var exitCode = await ProcessUtils.StartProcess (psi, stdout, stderr, cancellationToken, environmentVariables).ConfigureAwait (false); - ProcessUtils.ThrowIfFailed (exitCode, "emulator -list-avds", stderr); + ProcessUtils.ThrowIfFailed (exitCode, "emulator -list-avds", stderr, stdout); return ParseListAvdsOutput (stdout.ToString ()); }