https://github.com/DrSergei created https://github.com/llvm/llvm-project/pull/222122
Added support for modules paging according to [DAP specification](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Modules) >From fa60cd277aa3c8a64fe4c84b0db3e270b93904a0 Mon Sep 17 00:00:00 2001 From: Sergei Druzhkov <[email protected]> Date: Tue, 8 Sep 2026 22:23:49 +0300 Subject: [PATCH] [lldb-dap] Add paging into modules request --- .../tools/lldb-dap/module/TestDAP_module.py | 31 +++++++++++++++++++ .../Handler/ModulesRequestHandler.cpp | 14 +++++++-- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py b/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py index 945782ba0377b..0b6c9b722904a 100644 --- a/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py +++ b/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py @@ -141,3 +141,34 @@ def test_compile_units(self): self.assertIn(main_source_path, cu_paths, "Real path to main.cpp matches") session.continue_to_exit() + + @skipIfWindows + def test_modules_paging(self): + """Test modules paging using startModule and moduleCount.""" + session = self.build_and_create_session() + program = self.getBuildArtifact("a.out") + source = "main.cpp" + with session.configure(LaunchArgs(program)) as ctx: + breakpoint1_line = line_number(source, "// breakpoint 1") + bp_ids = session.resolve_source_breakpoints(source, [breakpoint1_line]) + session.verify_stopped_on_breakpoint(bp_ids, after=ctx.process_event) + + all_modules = list(session.get_modules().values()) + self.assertGreater(len(all_modules), 1, "Expected multiple modules loaded") + + page = session.get_modules(startModule=0, moduleCount=1) + self.assertEqual(len(page), 1) + module = next(iter(page.values())) + self.assertEqual(module.name, all_modules[0].name) + self.assertEqual(module.id, all_modules[0].id) + + page = session.get_modules(startModule=1, moduleCount=1) + self.assertEqual(len(page), 1) + module = next(iter(page.values())) + self.assertEqual(module.name, all_modules[1].name) + self.assertEqual(module.id, all_modules[1].id) + + page = session.get_modules(startModule=1, moduleCount=100) + self.assertEqual(len(page), len(all_modules) - 1) + + session.continue_to_exit() diff --git a/lldb/tools/lldb-dap/Handler/ModulesRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/ModulesRequestHandler.cpp index 697166a2a1a92..c79671ae3d087 100644 --- a/lldb/tools/lldb-dap/Handler/ModulesRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/ModulesRequestHandler.cpp @@ -9,6 +9,7 @@ #include "DAP.h" #include "ProtocolUtils.h" #include "RequestHandler.h" +#include <algorithm> using namespace lldb_dap::protocol; namespace lldb_dap { @@ -27,8 +28,17 @@ ModulesRequestHandler::Run(const std::optional<ModulesArguments> &args) const { const uint32_t total_modules = dap.target.GetNumModules(); response.totalModules = total_modules; - modules.reserve(total_modules); - for (uint32_t i = 0; i < total_modules; i++) { + const uint32_t start_module = args ? args->startModule : 0; + if (start_module >= total_modules) + return response; + + const uint32_t module_count = args ? args->moduleCount : 0; + const uint32_t end_module = + module_count == 0 ? total_modules + : std::min(total_modules, start_module + module_count); + + modules.reserve(end_module - start_module); + for (uint32_t i = start_module; i < end_module; ++i) { lldb::SBModule module = dap.target.GetModuleAtIndex(i); std::optional<Module> result = CreateModule(dap.target, module); _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
