Author: Sergei Druzhkov
Date: 2026-09-10T16:51:51+03:00
New Revision: 659faef7717be80c12e47604e61c01f2d7fc4975

URL: 
https://github.com/llvm/llvm-project/commit/659faef7717be80c12e47604e61c01f2d7fc4975
DIFF: 
https://github.com/llvm/llvm-project/commit/659faef7717be80c12e47604e61c01f2d7fc4975.diff

LOG: [lldb-dap] Add paging into modules request (#222122)

Added support for modules paging according to [DAP
specification](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Modules)

Added: 
    

Modified: 
    lldb/test/API/tools/lldb-dap/module/TestDAP_module.py
    lldb/tools/lldb-dap/Handler/ModulesRequestHandler.cpp

Removed: 
    


################################################################################
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..29f9019785837 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);
+  assert(start_module <= end_module);
+  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

Reply via email to