Files
clang-p2996/lldb/test/API/tools/lldb-dap/threads/TestDAP_threads.py
Walter Erquinigo 1654d7dc38 [lldb-dap] Add an option to provide a format for threads (#72196)
When this option gets enabled, descriptions of threads will be generated
using the format provided in the launch configuration instead of
generating it manually in the dap code. This allows lldb-dap to show an
output similar to the one in the CLI.
This is very similar to https://github.com/llvm/llvm-project/pull/71843
2023-11-14 13:23:55 -05:00

70 lines
2.8 KiB
Python

"""
Test lldb-dap setBreakpoints request
"""
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
import lldbdap_testcase
class TestDAP_threads(lldbdap_testcase.DAPTestCaseBase):
@skipIfWindows
@skipIfRemote
def test_correct_thread(self):
"""
Tests that the correct thread is selected if we continue from
a thread that goes away and hit a breakpoint in another thread.
In this case, the selected thread should be the thread that
just hit the breakpoint, and not the first thread in the list.
"""
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
source = "main.c"
breakpoint_line = line_number(source, "// break here")
lines = [breakpoint_line]
# Set breakpoint in the thread function
breakpoint_ids = self.set_source_breakpoints(source, lines)
self.assertEqual(
len(breakpoint_ids), len(lines), "expect correct number of breakpoints"
)
self.continue_to_breakpoints(breakpoint_ids)
# We're now stopped at the breakpoint in the first thread, thread #2.
# Continue to join the first thread and hit the breakpoint in the
# second thread, thread #3.
self.dap_server.request_continue()
stopped_event = self.dap_server.wait_for_stopped()
# Verify that the description is the relevant breakpoint,
# preserveFocusHint is False and threadCausedFocus is True
self.assertTrue(
stopped_event[0]["body"]["description"].startswith(
"breakpoint %s." % breakpoint_ids[0]
)
)
self.assertFalse(stopped_event[0]["body"]["preserveFocusHint"])
self.assertTrue(stopped_event[0]["body"]["threadCausedFocus"])
@skipIfWindows
@skipIfRemote
def test_thread_format(self):
"""
Tests the support for custom thread formats.
"""
program = self.getBuildArtifact("a.out")
self.build_and_launch(
program, customThreadFormat="This is thread index #${thread.index}"
)
source = "main.c"
breakpoint_line = line_number(source, "// break here")
lines = [breakpoint_line]
# Set breakpoint in the thread function
breakpoint_ids = self.set_source_breakpoints(source, lines)
self.assertEqual(
len(breakpoint_ids), len(lines), "expect correct number of breakpoints"
)
self.continue_to_breakpoints(breakpoint_ids)
# We are stopped at the second thread
threads = self.dap_server.get_threads()
self.assertEquals(threads[0]["name"], "This is thread index #1")
self.assertEquals(threads[1]["name"], "This is thread index #2")