Skip to content

Commit 0b9470b

Browse files
woruyuda-viper
andauthored
[lldb-dap] support moduleId in the stackTrace response (#149774)
This PR resolves #149316 --------- Co-authored-by: Ebuka Ezike <[email protected]>
1 parent ae6a9ce commit 0b9470b

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

lldb/test/API/tools/lldb-dap/coreFile/TestDAP_coreFile.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def test_core_file(self):
2626
"column": 0,
2727
"id": 524288,
2828
"line": 4,
29+
"moduleId": "01DF54A6-045E-657D-3F8F-FB9CE1118789-14F8BD6D",
2930
"name": "bar",
3031
"source": {"name": "main.c", "path": "/home/labath/test/main.c"},
3132
"instructionPointerReference": "0x40011C",
@@ -34,6 +35,7 @@ def test_core_file(self):
3435
"column": 0,
3536
"id": 524289,
3637
"line": 10,
38+
"moduleId": "01DF54A6-045E-657D-3F8F-FB9CE1118789-14F8BD6D",
3739
"name": "foo",
3840
"source": {"name": "main.c", "path": "/home/labath/test/main.c"},
3941
"instructionPointerReference": "0x400142",
@@ -42,6 +44,7 @@ def test_core_file(self):
4244
"column": 0,
4345
"id": 524290,
4446
"line": 16,
47+
"moduleId": "01DF54A6-045E-657D-3F8F-FB9CE1118789-14F8BD6D",
4548
"name": "_start",
4649
"source": {"name": "main.c", "path": "/home/labath/test/main.c"},
4750
"instructionPointerReference": "0x40015F",

lldb/test/API/tools/lldb-dap/stackTrace/TestDAP_stackTrace.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,3 +242,36 @@ def test_StackFrameFormat(self):
242242

243243
frame = self.get_stackFrames(format={"parameters": False, "module": True})[0]
244244
self.assertEqual(frame["name"], "a.out recurse")
245+
246+
@skipIfWindows
247+
def test_stack_frame_module_id(self):
248+
program = self.getBuildArtifact("a.out")
249+
self.build_and_launch(program)
250+
source = "main.c"
251+
lines = [line_number(source, "recurse end")]
252+
breakpoint_ids = self.set_source_breakpoints(source, lines)
253+
self.assertEqual(
254+
len(breakpoint_ids), len(lines), "expect correct number of breakpoints"
255+
)
256+
257+
self.continue_to_breakpoints(breakpoint_ids)
258+
259+
modules = self.dap_server.get_modules()
260+
name_to_id = {
261+
name: info["id"] for name, info in modules.items() if "id" in info
262+
}
263+
264+
stack_frames = self.get_stackFrames()
265+
for frame in stack_frames:
266+
module_id = frame.get("moduleId")
267+
source_name = frame.get("source", {}).get("name")
268+
if module_id is None or source_name is None:
269+
continue
270+
271+
if source_name in name_to_id:
272+
expected_id = name_to_id[source_name]
273+
self.assertEqual(
274+
module_id,
275+
expected_id,
276+
f"Expected moduleId '{expected_id}' for {source_name}, got: {module_id}",
277+
)

lldb/tools/lldb-dap/JSONUtils.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,13 @@ llvm::json::Value CreateStackFrame(DAP &dap, lldb::SBFrame &frame,
550550
if (frame.IsArtificial() || frame.IsHidden())
551551
object.try_emplace("presentationHint", "subtle");
552552

553+
lldb::SBModule module = frame.GetModule();
554+
if (module.IsValid()) {
555+
std::string uuid = module.GetUUIDString();
556+
if (!uuid.empty())
557+
object.try_emplace("moduleId", uuid);
558+
}
559+
553560
return llvm::json::Value(std::move(object));
554561
}
555562

0 commit comments

Comments
 (0)