https://github.com/ashgti created https://github.com/llvm/llvm-project/pull/139311
To improve logging this adjusts two properties of the existing tests: * Forwards stderr from lldb-dap to the process in case errors are reported to stderr. * Adjusts `DebugAdapterServer.terminate` to close stdin and wait for the process to exit instead of sending SIGTERM. Additionally, if we end up with a non-zero exit status we now raise an error to note the unexpected exit status. With these changes, I did find one test case in `TestDAP_console.test_diagnositcs` that was not waiting to ensure the expected event had arrived by the time it performed an assert. >From abb7aad60e314fadb235e370f431112fa078e023 Mon Sep 17 00:00:00 2001 From: John Harrison <harj...@google.com> Date: Fri, 9 May 2025 11:58:35 -0700 Subject: [PATCH] [lldb-dap] Improving tests logging to understand CI failures. To improve logging this adjusts two properties of the existing tests: * Forwards stderr from lldb-dap to the process in case errors are reported to stderr. * Adjusts `DebugAdapterServer.terminate` to close stdin and wait for the process to exit instead of sending SIGTERM. Additionally, if we end up with a non-zero exit status we now raise an error to note the unexpected exit status. With these changes, I did find one test case in `TestDAP_console.test_diagnositcs` that was not waiting to ensure the expected event had arrived by the time it performed an assert. --- .../test/tools/lldb-dap/dap_server.py | 36 +++++++++++++++---- .../tools/lldb-dap/console/TestDAP_console.py | 5 +-- lldb/test/API/tools/lldb-dap/io/TestDAP_io.py | 4 --- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py index e10342b72f4f0..292209f8ab042 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py @@ -8,6 +8,7 @@ import socket import string import subprocess +import signal import sys import threading import time @@ -1269,7 +1270,7 @@ def launch(cls, /, executable, env=None, log_file=None, connection=None): args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, + stderr=sys.stderr, env=adapter_env, ) @@ -1302,14 +1303,37 @@ def get_pid(self): def terminate(self): super(DebugAdapterServer, self).terminate() if self.process is not None: - self.process.terminate() + process = self.process + self.process = None try: - self.process.wait(timeout=20) + # When we close stdin it should signal the lldb-dap that no + # new messages will arrive and it should shutdown on its own. + process.stdin.close() + process.wait(timeout=20) except subprocess.TimeoutExpired: - self.process.kill() - self.process.wait() - self.process = None + process.kill() + process.wait() + if process.returncode != 0: + raise DebugAdapterProcessError(process.returncode) + +class DebugAdapterError(Exception): pass + +class DebugAdapterProcessError(DebugAdapterError): + """Raised when the lldb-dap process exits with a non-zero exit status. + """ + + def __init__(self, returncode): + self.returncode = returncode + + def __str__(self): + if self.returncode and self.returncode < 0: + try: + return f"lldb-dap died with {signal.Signals(-self.returncode).name}." + except ValueError: + return f"lldb-dap died with unknown signal {-self.returncode}." + else: + return f"lldb-dap returned non-zero exit status {self.returncode}." def attach_options_specified(options): if options.pid is not None: diff --git a/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py b/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py index 8642e317f9b3a..f6809c0cdcb60 100644 --- a/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py +++ b/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py @@ -176,9 +176,10 @@ def test_diagnositcs(self): f"target create --core {core}", context="repl" ) - output = self.get_important() + diag_message = self.collect_important(timeout_secs=self.timeoutval, pattern="minidump file") + self.assertIn( "warning: unable to retrieve process ID from minidump file", - output, + diag_message, "diagnostic found in important output", ) diff --git a/lldb/test/API/tools/lldb-dap/io/TestDAP_io.py b/lldb/test/API/tools/lldb-dap/io/TestDAP_io.py index f05f876e57b49..b72b98de412b4 100644 --- a/lldb/test/API/tools/lldb-dap/io/TestDAP_io.py +++ b/lldb/test/API/tools/lldb-dap/io/TestDAP_io.py @@ -22,13 +22,9 @@ def cleanup(): process.terminate() process.wait() stdout_data = process.stdout.read().decode() - stderr_data = process.stderr.read().decode() print("========= STDOUT =========", file=sys.stderr) print(stdout_data, file=sys.stderr) print("========= END =========", file=sys.stderr) - print("========= STDERR =========", file=sys.stderr) - print(stderr_data, file=sys.stderr) - print("========= END =========", file=sys.stderr) print("========= DEBUG ADAPTER PROTOCOL LOGS =========", file=sys.stderr) with open(log_file_path, "r") as file: print(file.read(), file=sys.stderr) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits