//===-- ModulesRequestHandler.cpp -----------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "DAP.h" #include "ProtocolUtils.h" #include "RequestHandler.h" using namespace lldb_dap::protocol; namespace lldb_dap { /// Modules can be retrieved from the debug adapter with this request which can /// either return all modules or a range of modules to support paging. /// /// Clients should only call this request if the corresponding capability /// `supportsModulesRequest` is true. llvm::Expected ModulesRequestHandler::Run(const std::optional &args) const { ModulesResponseBody response; std::vector &modules = response.modules; std::lock_guard guard(dap.modules_mutex); 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++) { lldb::SBModule module = dap.target.GetModuleAtIndex(i); std::optional result = CreateModule(dap.target, module); if (result && !result->id.empty()) { dap.modules.insert(result->id); modules.emplace_back(std::move(result).value()); } } return response; } } // namespace lldb_dap