[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