[Lldb-commits] [lldb] [lldb-dap] Treat empty thread names as unset (PR #141529)
via lldb-commits
lldb-commits at lists.llvm.org
Thu May 29 03:58:13 PDT 2025
https://github.com/Nerixyz updated https://github.com/llvm/llvm-project/pull/141529
>From 0f5a95ebe67f54ba7dfe55ff8450226ba84f113d Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Mon, 26 May 2025 22:25:05 +0200
Subject: [PATCH] [lldb-dap] Treat empty thread names as unset
---
lldb/test/API/tools/lldb-dap/threads/Makefile | 2 +-
.../tools/lldb-dap/threads/TestDAP_threads.py | 27 +++++++++++++------
lldb/test/API/tools/lldb-dap/threads/main.c | 21 ---------------
lldb/test/API/tools/lldb-dap/threads/main.cpp | 18 +++++++++++++
lldb/tools/lldb-dap/JSONUtils.cpp | 10 +++----
5 files changed, 43 insertions(+), 35 deletions(-)
delete mode 100644 lldb/test/API/tools/lldb-dap/threads/main.c
create mode 100644 lldb/test/API/tools/lldb-dap/threads/main.cpp
diff --git a/lldb/test/API/tools/lldb-dap/threads/Makefile b/lldb/test/API/tools/lldb-dap/threads/Makefile
index aa6b054685d61..c33ae5685efc7 100644
--- a/lldb/test/API/tools/lldb-dap/threads/Makefile
+++ b/lldb/test/API/tools/lldb-dap/threads/Makefile
@@ -1,4 +1,4 @@
-C_SOURCES := main.c
+CXX_SOURCES := main.cpp
ENABLE_THREADS := YES
diff --git a/lldb/test/API/tools/lldb-dap/threads/TestDAP_threads.py b/lldb/test/API/tools/lldb-dap/threads/TestDAP_threads.py
index a4658da58ac94..acd6108853787 100644
--- a/lldb/test/API/tools/lldb-dap/threads/TestDAP_threads.py
+++ b/lldb/test/API/tools/lldb-dap/threads/TestDAP_threads.py
@@ -1,5 +1,5 @@
"""
-Test lldb-dap setBreakpoints request
+Test lldb-dap threads request
"""
from lldbsuite.test.decorators import *
@@ -9,7 +9,6 @@
class TestDAP_threads(lldbdap_testcase.DAPTestCaseBase):
- @skipIfWindows
def test_correct_thread(self):
"""
Tests that the correct thread is selected if we continue from
@@ -19,7 +18,7 @@ def test_correct_thread(self):
"""
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
- source = "main.c"
+ source = "main.cpp"
breakpoint_line = line_number(source, "// break here")
lines = [breakpoint_line]
# Set breakpoint in the thread function
@@ -42,8 +41,10 @@ def test_correct_thread(self):
)
self.assertFalse(stopped_event[0]["body"]["preserveFocusHint"])
self.assertTrue(stopped_event[0]["body"]["threadCausedFocus"])
+ # All threads should be named Thread {index}
+ threads = self.dap_server.get_threads()
+ self.assertTrue(all(len(t["name"]) > 0 for t in threads))
- @skipIfWindows
def test_thread_format(self):
"""
Tests the support for custom thread formats.
@@ -54,7 +55,7 @@ def test_thread_format(self):
customThreadFormat="This is thread index #${thread.index}",
stopCommands=["thread list"],
)
- source = "main.c"
+ source = "main.cpp"
breakpoint_line = line_number(source, "// break here")
lines = [breakpoint_line]
# Set breakpoint in the thread function
@@ -63,8 +64,18 @@ def test_thread_format(self):
len(breakpoint_ids), len(lines), "expect correct number of breakpoints"
)
self.continue_to_breakpoints(breakpoint_ids)
- # We are stopped at the second thread
+ # We are stopped at the first thread
threads = self.dap_server.get_threads()
print("got thread", threads)
- self.assertEqual(threads[0]["name"], "This is thread index #1")
- self.assertEqual(threads[1]["name"], "This is thread index #2")
+ if self.getPlatform() == "windows":
+ # Windows creates a thread pool once WaitForSingleObject is called
+ # by thread.join(). As we are in the thread function, we can't be
+ # certain that join() has been called yet and a thread pool has
+ # been created, thus we only check for the first two threads.
+ names = list(sorted(t["name"] for t in threads))[:2]
+ self.assertEqual(
+ names, ["This is thread index #1", "This is thread index #2"]
+ )
+ else:
+ self.assertEqual(threads[0]["name"], "This is thread index #1")
+ self.assertEqual(threads[1]["name"], "This is thread index #2")
diff --git a/lldb/test/API/tools/lldb-dap/threads/main.c b/lldb/test/API/tools/lldb-dap/threads/main.c
deleted file mode 100644
index 3eeb1ef02cb87..0000000000000
--- a/lldb/test/API/tools/lldb-dap/threads/main.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <pthread.h>
-#include <stdio.h>
-
-int state_var;
-
-void *thread(void *in) {
- state_var++; // break here
- return NULL;
-}
-
-int main(int argc, char **argv) {
- pthread_t t1, t2;
-
- pthread_create(&t1, NULL, *thread, NULL);
- pthread_join(t1, NULL);
- pthread_create(&t2, NULL, *thread, NULL);
- pthread_join(t2, NULL);
-
- printf("state_var is %d\n", state_var);
- return 0;
-}
diff --git a/lldb/test/API/tools/lldb-dap/threads/main.cpp b/lldb/test/API/tools/lldb-dap/threads/main.cpp
new file mode 100644
index 0000000000000..178dcb0b2f2ef
--- /dev/null
+++ b/lldb/test/API/tools/lldb-dap/threads/main.cpp
@@ -0,0 +1,18 @@
+#include <cstdio>
+#include <thread>
+
+int state_var;
+
+void thread() {
+ state_var++; // break here
+}
+
+int main(int argc, char **argv) {
+ std::thread t1(thread);
+ t1.join();
+ std::thread t2(thread);
+ t2.join();
+
+ printf("state_var is %d\n", state_var);
+ return 0;
+}
diff --git a/lldb/tools/lldb-dap/JSONUtils.cpp b/lldb/tools/lldb-dap/JSONUtils.cpp
index c9c6f4554c325..f0b3dfb595717 100644
--- a/lldb/tools/lldb-dap/JSONUtils.cpp
+++ b/lldb/tools/lldb-dap/JSONUtils.cpp
@@ -764,12 +764,12 @@ llvm::json::Value CreateThread(lldb::SBThread &thread, lldb::SBFormat &format) {
if (format && thread.GetDescriptionWithFormat(format, stream).Success()) {
thread_str = stream.GetData();
} else {
- const char *thread_name = thread.GetName();
- const char *queue_name = thread.GetQueueName();
+ llvm::StringRef thread_name(thread.GetName());
+ llvm::StringRef queue_name(thread.GetQueueName());
- if (thread_name) {
- thread_str = std::string(thread_name);
- } else if (queue_name) {
+ if (!thread_name.empty()) {
+ thread_str = thread_name.str();
+ } else if (!queue_name.empty()) {
auto kind = thread.GetQueue().GetKind();
std::string queue_kind_label = "";
if (kind == lldb::eQueueKindSerial) {
More information about the lldb-commits
mailing list