This revision was automatically updated to reflect the committed changes. Closed by commit rGda59370b0977: [lldb-vscode] Adding support for column break points. (authored by ashgti, committed by dgoldman).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D154029/new/ https://reviews.llvm.org/D154029 Files: lldb/tools/lldb-vscode/JSONUtils.cpp lldb/tools/lldb-vscode/JSONUtils.h lldb/tools/lldb-vscode/SourceBreakpoint.cpp Index: lldb/tools/lldb-vscode/SourceBreakpoint.cpp =================================================================== --- lldb/tools/lldb-vscode/SourceBreakpoint.cpp +++ lldb/tools/lldb-vscode/SourceBreakpoint.cpp @@ -16,7 +16,9 @@ column(GetUnsigned(obj, "column", 0)) {} void SourceBreakpoint::SetBreakpoint(const llvm::StringRef source_path) { - bp = g_vsc.target.BreakpointCreateByLocation(source_path.str().c_str(), line); + lldb::SBFileSpecList module_list; + bp = g_vsc.target.BreakpointCreateByLocation(source_path.str().c_str(), line, + column, 0, module_list); // See comments in BreakpointBase::GetBreakpointLabel() for details of why // we add a label to our breakpoints. bp.AddName(GetBreakpointLabel()); Index: lldb/tools/lldb-vscode/JSONUtils.h =================================================================== --- lldb/tools/lldb-vscode/JSONUtils.h +++ lldb/tools/lldb-vscode/JSONUtils.h @@ -232,13 +232,21 @@ /// provided by the setBreakpoints request are returned to the IDE as a /// fallback. /// +/// \param[in] request_column +/// An optional column to use when creating the resulting "Breakpoint" object. +/// It is used if the breakpoint has no valid locations. +/// It is useful to ensure the same column +/// provided by the setBreakpoints request are returned to the IDE as a +/// fallback. +/// /// \return /// A "Breakpoint" JSON object with that follows the formal JSON /// definition outlined by Microsoft. llvm::json::Value CreateBreakpoint(lldb::SBBreakpoint &bp, std::optional<llvm::StringRef> request_path = std::nullopt, - std::optional<uint32_t> request_line = std::nullopt); + std::optional<uint32_t> request_line = std::nullopt, + std::optional<uint32_t> request_column = std::nullopt); /// Converts a LLDB module to a VS Code DAP module for use in "modules" events. /// Index: lldb/tools/lldb-vscode/JSONUtils.cpp =================================================================== --- lldb/tools/lldb-vscode/JSONUtils.cpp +++ lldb/tools/lldb-vscode/JSONUtils.cpp @@ -308,7 +308,8 @@ // } llvm::json::Value CreateBreakpoint(lldb::SBBreakpoint &bp, std::optional<llvm::StringRef> request_path, - std::optional<uint32_t> request_line) { + std::optional<uint32_t> request_line, + std::optional<uint32_t> request_column) { // Each breakpoint location is treated as a separate breakpoint for VS code. // They don't have the notion of a single breakpoint with multiple locations. llvm::json::Object object; @@ -345,11 +346,16 @@ const auto line = line_entry.GetLine(); if (line != UINT32_MAX) object.try_emplace("line", line); + const auto column = line_entry.GetColumn(); + if (column != 0) + object.try_emplace("column", column); object.try_emplace("source", CreateSource(line_entry)); } // We try to add request_line as a fallback if (request_line) object.try_emplace("line", *request_line); + if (request_column) + object.try_emplace("column", *request_column); return llvm::json::Value(std::move(object)); }
Index: lldb/tools/lldb-vscode/SourceBreakpoint.cpp =================================================================== --- lldb/tools/lldb-vscode/SourceBreakpoint.cpp +++ lldb/tools/lldb-vscode/SourceBreakpoint.cpp @@ -16,7 +16,9 @@ column(GetUnsigned(obj, "column", 0)) {} void SourceBreakpoint::SetBreakpoint(const llvm::StringRef source_path) { - bp = g_vsc.target.BreakpointCreateByLocation(source_path.str().c_str(), line); + lldb::SBFileSpecList module_list; + bp = g_vsc.target.BreakpointCreateByLocation(source_path.str().c_str(), line, + column, 0, module_list); // See comments in BreakpointBase::GetBreakpointLabel() for details of why // we add a label to our breakpoints. bp.AddName(GetBreakpointLabel()); Index: lldb/tools/lldb-vscode/JSONUtils.h =================================================================== --- lldb/tools/lldb-vscode/JSONUtils.h +++ lldb/tools/lldb-vscode/JSONUtils.h @@ -232,13 +232,21 @@ /// provided by the setBreakpoints request are returned to the IDE as a /// fallback. /// +/// \param[in] request_column +/// An optional column to use when creating the resulting "Breakpoint" object. +/// It is used if the breakpoint has no valid locations. +/// It is useful to ensure the same column +/// provided by the setBreakpoints request are returned to the IDE as a +/// fallback. +/// /// \return /// A "Breakpoint" JSON object with that follows the formal JSON /// definition outlined by Microsoft. llvm::json::Value CreateBreakpoint(lldb::SBBreakpoint &bp, std::optional<llvm::StringRef> request_path = std::nullopt, - std::optional<uint32_t> request_line = std::nullopt); + std::optional<uint32_t> request_line = std::nullopt, + std::optional<uint32_t> request_column = std::nullopt); /// Converts a LLDB module to a VS Code DAP module for use in "modules" events. /// Index: lldb/tools/lldb-vscode/JSONUtils.cpp =================================================================== --- lldb/tools/lldb-vscode/JSONUtils.cpp +++ lldb/tools/lldb-vscode/JSONUtils.cpp @@ -308,7 +308,8 @@ // } llvm::json::Value CreateBreakpoint(lldb::SBBreakpoint &bp, std::optional<llvm::StringRef> request_path, - std::optional<uint32_t> request_line) { + std::optional<uint32_t> request_line, + std::optional<uint32_t> request_column) { // Each breakpoint location is treated as a separate breakpoint for VS code. // They don't have the notion of a single breakpoint with multiple locations. llvm::json::Object object; @@ -345,11 +346,16 @@ const auto line = line_entry.GetLine(); if (line != UINT32_MAX) object.try_emplace("line", line); + const auto column = line_entry.GetColumn(); + if (column != 0) + object.try_emplace("column", column); object.try_emplace("source", CreateSource(line_entry)); } // We try to add request_line as a fallback if (request_line) object.try_emplace("line", *request_line); + if (request_column) + object.try_emplace("column", *request_column); return llvm::json::Value(std::move(object)); }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits