[Lldb-commits] [lldb] [lldb-dap][NFC] Use GetStringValue helper (PR #199672)

Sergei Druzhkov via lldb-commits lldb-commits at lists.llvm.org
Tue May 26 06:07:34 PDT 2026


https://github.com/DrSergei created https://github.com/llvm/llvm-project/pull/199672

I noticed some inconsistency in working with `SBStructuredData.GetStringValue` (e.g. use `length + 1` or `length`), so it would be better to remove that code duplication and use common helper (`GetStringValue`) to do this routine.

>From 8530318b91b8096a5142804350b7e4bf0946cfa9 Mon Sep 17 00:00:00 2001
From: Sergei Druzhkov <serzhdruzhok at gmail.com>
Date: Tue, 26 May 2026 09:38:55 +0300
Subject: [PATCH] [lldb-dap][NFC] Use GetStringValue helper

---
 lldb/tools/lldb-dap/DAP.cpp       |  9 +------
 lldb/tools/lldb-dap/JSONUtils.cpp | 11 ++++-----
 lldb/tools/lldb-dap/LLDBUtils.cpp | 39 ++++++++++---------------------
 3 files changed, 17 insertions(+), 42 deletions(-)

diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp
index e97b6e0898a63..c52c0ee898eb8 100644
--- a/lldb/tools/lldb-dap/DAP.cpp
+++ b/lldb/tools/lldb-dap/DAP.cpp
@@ -95,14 +95,7 @@ static std::string GetStringFromStructuredData(lldb::SBStructuredData &data,
   if (!keyValue)
     return std::string();
 
-  const size_t length = keyValue.GetStringValue(nullptr, 0);
-
-  if (length == 0)
-    return std::string();
-
-  std::string str(length + 1, 0);
-  keyValue.GetStringValue(&str[0], length + 1);
-  return str;
+  return GetStringValue(keyValue);
 }
 
 static uint64_t GetUintFromStructuredData(lldb::SBStructuredData &data,
diff --git a/lldb/tools/lldb-dap/JSONUtils.cpp b/lldb/tools/lldb-dap/JSONUtils.cpp
index add12313e9ff9..1ebfe568c27e1 100644
--- a/lldb/tools/lldb-dap/JSONUtils.cpp
+++ b/lldb/tools/lldb-dap/JSONUtils.cpp
@@ -9,6 +9,7 @@
 #include "JSONUtils.h"
 #include "DAP.h"
 #include "ExceptionBreakpoint.h"
+#include "LLDBUtils.h"
 #include "Protocol/ProtocolBase.h"
 #include "Protocol/ProtocolRequests.h"
 #include "lldb/API/SBAddress.h"
@@ -456,13 +457,9 @@ static void FilterAndGetValueForKey(const lldb::SBStructuredData data,
   case lldb::eStructuredDataTypeBoolean:
     out.try_emplace(key_utf8, value.GetBooleanValue());
     break;
-  case lldb::eStructuredDataTypeString: {
-    // Get the string size before reading
-    const size_t str_length = value.GetStringValue(nullptr, 0);
-    std::string str(str_length + 1, 0);
-    value.GetStringValue(&str[0], str_length);
-    out.try_emplace(key_utf8, llvm::json::fixUTF8(str));
-  } break;
+  case lldb::eStructuredDataTypeString:
+    out.try_emplace(key_utf8, llvm::json::fixUTF8(GetStringValue(value)));
+    break;
   case lldb::eStructuredDataTypeDictionary: {
     lldb::SBStream contents;
     value.GetAsJSON(contents);
diff --git a/lldb/tools/lldb-dap/LLDBUtils.cpp b/lldb/tools/lldb-dap/LLDBUtils.cpp
index 826598f260ef5..3c968aaa6447b 100644
--- a/lldb/tools/lldb-dap/LLDBUtils.cpp
+++ b/lldb/tools/lldb-dap/LLDBUtils.cpp
@@ -48,12 +48,9 @@ static bool RunLLDBCommands(lldb::SBDebugger &debugger, llvm::StringRef prefix,
 
     // Get the current prompt from settings.
     if (const lldb::SBStructuredData prompt = debugger.GetSetting("prompt")) {
-      const size_t prompt_length = prompt.GetStringValue(nullptr, 0);
-
-      if (prompt_length != 0) {
-        prompt_string.resize(prompt_length + 1);
-        prompt.GetStringValue(prompt_string.data(), prompt_string.length());
-      }
+      std::string tmp_prompt = GetStringValue(prompt);
+      if (!tmp_prompt.empty())
+        prompt_string = std::move(tmp_prompt);
     }
   }
 
@@ -179,29 +176,17 @@ uint64_t MakeDAPFrameID(lldb::SBFrame &frame) {
 
 lldb::StopDisassemblyType
 GetStopDisassemblyDisplay(lldb::SBDebugger &debugger) {
-  lldb::StopDisassemblyType result =
-      lldb::StopDisassemblyType::eStopDisassemblyTypeNoDebugInfo;
   lldb::SBStructuredData string_result =
       debugger.GetSetting("stop-disassembly-display");
-  const size_t result_length = string_result.GetStringValue(nullptr, 0);
-  if (result_length > 0) {
-    std::string result_string(result_length, '\0');
-    string_result.GetStringValue(result_string.data(), result_length + 1);
-
-    result =
-        llvm::StringSwitch<lldb::StopDisassemblyType>(result_string)
-            .Case("never", lldb::StopDisassemblyType::eStopDisassemblyTypeNever)
-            .Case("always",
-                  lldb::StopDisassemblyType::eStopDisassemblyTypeAlways)
-            .Case("no-source",
-                  lldb::StopDisassemblyType::eStopDisassemblyTypeNoSource)
-            .Case("no-debuginfo",
-                  lldb::StopDisassemblyType::eStopDisassemblyTypeNoDebugInfo)
-            .Default(
-                lldb::StopDisassemblyType::eStopDisassemblyTypeNoDebugInfo);
-  }
-
-  return result;
+  return llvm::StringSwitch<lldb::StopDisassemblyType>(
+             GetStringValue(string_result))
+      .Case("never", lldb::StopDisassemblyType::eStopDisassemblyTypeNever)
+      .Case("always", lldb::StopDisassemblyType::eStopDisassemblyTypeAlways)
+      .Case("no-source",
+            lldb::StopDisassemblyType::eStopDisassemblyTypeNoSource)
+      .Case("no-debuginfo",
+            lldb::StopDisassemblyType::eStopDisassemblyTypeNoDebugInfo)
+      .Default(lldb::StopDisassemblyType::eStopDisassemblyTypeNoDebugInfo);
 }
 
 llvm::Error ToError(const lldb::SBError &error, bool show_user) {



More information about the lldb-commits mailing list