[Lldb-commits] [lldb] Bugfix: Not showing the synthetic children of values behind pointers (PR #117755)
Sergey Kuznetsov via lldb-commits
lldb-commits at lists.llvm.org
Tue Nov 26 10:04:53 PST 2024
https://github.com/skuznetsov created https://github.com/llvm/llvm-project/pull/117755
This bug fix for the situation that was extensively discussed at LLVM Discourse thread: https://discourse.llvm.org/t/synthetic-data-providers-and-lldb-dap/
>From 82a3bc3aaf57f25a1041cda4082b24bd8cdf8919 Mon Sep 17 00:00:00 2001
From: Sergey Kuznetsov <sergey at iterudit.com>
Date: Tue, 26 Nov 2024 12:54:30 -0500
Subject: [PATCH] Bugfix: Not showing the synthetic children of values behind
pointers
---
lldb/tools/lldb-dap/lldb-dap.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp
index 3bfc578806021e..b86994f60f04e5 100644
--- a/lldb/tools/lldb-dap/lldb-dap.cpp
+++ b/lldb/tools/lldb-dap/lldb-dap.cpp
@@ -4020,6 +4020,10 @@ void request_variables(DAP &dap, const llvm::json::Object &request) {
std::optional<std::string> custom_name = {}) {
if (!child.IsValid())
return;
+ if (child.IsSynthetic() && (child.GetType().IsPointerType() || child.GetType().IsReferenceType())) {
+ // Dereference to access synthetic children behind pointers/references
+ child = child.Dereference();
+ }
bool is_permanent =
dap.variables.IsPermanentVariableReference(variablesReference);
int64_t var_ref = dap.variables.InsertVariable(child, is_permanent);
@@ -4028,6 +4032,9 @@ void request_variables(DAP &dap, const llvm::json::Object &request) {
dap.enable_synthetic_child_debugging,
/*is_name_duplicated=*/false, custom_name));
};
+ if (variable.GetType().IsPointerType() || variable.GetType().IsReferenceType()) {
+ variable = variable.Dereference();
+ }
const int64_t num_children = variable.GetNumChildren();
int64_t end_idx = start + ((count == 0) ? num_children : count);
int64_t i = start;
More information about the lldb-commits
mailing list