[llvm] [Dexter] Temporarily print DAP logs on specific exception (PR #157130)

Orlando Cazalet-Hyams via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 5 08:46:40 PDT 2025


https://github.com/OCHyams created https://github.com/llvm/llvm-project/pull/157130

Temporarily print the DAP log if this fails to aid debugging a buildbot failure that doesn't reproduce easily.

See #157090 description for motivation


>From fa9ca0fad7d3992409bf5e759e23af18758ab81b Mon Sep 17 00:00:00 2001
From: Orlando Cazalet-Hyams <orlando.hyams at sony.com>
Date: Fri, 5 Sep 2025 16:45:02 +0100
Subject: [PATCH] [Dexter] Temporarily print DAP logs on specific exception

---
 .../debuginfo-tests/dexter/dex/debugger/DAP.py      |  4 ++++
 .../dexter/dex/debugger/lldb/LLDB.py                | 13 ++++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py b/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py
index 4e64f880487f5..6f94ff34e6b21 100644
--- a/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py
+++ b/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py
@@ -10,6 +10,7 @@
 import abc
 from collections import defaultdict
 import copy
+import io
 import json
 import os
 import shlex
@@ -50,6 +51,7 @@ def __init__(self, context):
         self.prefix_recv: str = "<-"
         self.out_handle = None
         self.open = False
+        self.text = io.StringIO() # In-process copy of the message log.
         self.lock = threading.Lock()
 
     def _custom_enter(self):
@@ -91,6 +93,8 @@ def write_message(self, message: dict, incoming: bool):
         message_str = json.dumps(
             self._colorize_dap_message(message), indent=self.indent
         ).replace("\\u001b", "\033")
+
+        self.text.write(f"{prefix} {message_str}\n")
         if self.out_handle is not None and self.open:
             with self.lock:
                 self.out_handle.write(f"{prefix} {message_str}\n")
diff --git a/cross-project-tests/debuginfo-tests/dexter/dex/debugger/lldb/LLDB.py b/cross-project-tests/debuginfo-tests/dexter/dex/debugger/lldb/LLDB.py
index fa10b4914d45c..fe5bf76382b44 100644
--- a/cross-project-tests/debuginfo-tests/dexter/dex/debugger/lldb/LLDB.py
+++ b/cross-project-tests/debuginfo-tests/dexter/dex/debugger/lldb/LLDB.py
@@ -430,9 +430,16 @@ def _post_step_hook(self):
             trace_response = self._await_response(trace_req_id)
             if not trace_response["success"]:
                 raise DebuggerException("failed to get stack frames")
-            stackframes = trace_response["body"]["stackFrames"]
-            path = stackframes[0]["source"]["path"]
-            addr = stackframes[0]["instructionPointerReference"]
+            try:
+                stackframes = trace_response["body"]["stackFrames"]
+                path = stackframes[0]["source"]["path"]
+                addr = stackframes[0]["instructionPointerReference"]
+            except KeyError as e:
+                # Temporarily print the DAP log if this fails to aid debugging
+                # a buildbot failure that doesn't reproduce easily.
+                print(self.message_logger.text.getvalue())
+                raise e
+
             if any(
                 self._debugger_state.bp_addr_map.get(self.dex_id_to_dap_id[dex_bp_id])
                 == addr



More information about the llvm-commits mailing list