[Lldb-commits] [lldb] [Support] [lldb] Fix thread jump #45326 (PR #135778)
Ebuka Ezike via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 15 14:03:46 PDT 2025
https://github.com/da-viper updated https://github.com/llvm/llvm-project/pull/135778
>From a7e200ad48ea84deca9a10d90addece8d14c08ac Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Tue, 15 Apr 2025 12:25:41 +0100
Subject: [PATCH 1/2] [lldb] Add test for jumping by offset
Signed-off-by: Ebuka Ezike <yerimyah1 at gmail.com>
---
.../thread/jump/TestThreadJump.py | 70 ++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/lldb/test/API/functionalities/thread/jump/TestThreadJump.py b/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
index 3c13a969bc3fd..d603580ac6f36 100644
--- a/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
+++ b/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
@@ -10,9 +10,12 @@
class ThreadJumpTestCase(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.build()
+
def test(self):
"""Test thread jump handling."""
- self.build()
exe = self.getBuildArtifact("a.out")
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
@@ -62,6 +65,71 @@ def test(self):
substrs=["error"],
)
+ def test_jump_offset(self):
+ """Test Thread Jump by negative or positive offset"""
+ exe = self.getBuildArtifact("a.out")
+ file_name = "main.cpp"
+ self.runCmd(f"target create {exe}", CURRENT_EXECUTABLE_SET)
+
+ pos_jump = line_number(file_name, "// jump_offset 1")
+ neg_jump = line_number(file_name, "// jump_offset 2")
+ pos_breakpoint = line_number(file_name, "// breakpoint 1")
+ neg_breakpoint = line_number(file_name, "// breakpoint 2")
+ pos_jump_offset = pos_jump - pos_breakpoint
+ neg_jump_offset = neg_jump - neg_breakpoint
+
+ var_1, var_1_value = ("var_1", "10")
+ var_2, var_2_value = ("var_2", "40")
+ var_3, var_3_value = ("var_3", "10")
+
+ # create pos_breakpoint and neg_breakpoint
+ lldbutil.run_break_set_by_file_and_line(
+ self, file_name, pos_breakpoint, num_expected_locations=1
+ )
+ lldbutil.run_break_set_by_file_and_line(
+ self, file_name, neg_breakpoint, num_expected_locations=1
+ )
+
+ self.runCmd("run", RUN_SUCCEEDED)
+
+ # test positive jump
+ # The stop reason of the thread should be breakpoint 1.
+ self.expect(
+ "thread list",
+ STOPPED_DUE_TO_BREAKPOINT + " 1",
+ substrs=[
+ "stopped",
+ f"{file_name}:{pos_breakpoint}",
+ "stop reason = breakpoint 1",
+ ],
+ )
+
+ self.runCmd(f"thread jump --by +{pos_jump_offset}")
+ self.expect("process status", substrs=[f"at {file_name}:{pos_jump}"])
+ self.expect(f"print {var_1}", substrs=[var_1_value])
+
+ self.runCmd("thread step-over")
+ self.expect(f"print {var_2}", substrs=[var_2_value])
+
+ self.runCmd("continue")
+
+ # test negative jump
+ # The stop reason of the thread should be breakpoint 1.
+ self.expect(
+ "thread list",
+ STOPPED_DUE_TO_BREAKPOINT + " 2",
+ substrs=[
+ "stopped",
+ f"{file_name}:{neg_breakpoint}",
+ "stop reason = breakpoint 2",
+ ],
+ )
+
+ self.runCmd(f"thread jump --by {neg_jump_offset}")
+ self.expect("process status", substrs=[f"at {file_name}:{neg_jump}"])
+ self.runCmd("thread step-over")
+ self.expect(f"print {var_3}", substrs=[var_3_value])
+
def do_min_test(self, start, jump, var, value):
# jump to the start marker
self.runCmd("j %i" % start)
>From 67047337eee83a766a9dc7c82d42f95994419fbb Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Tue, 15 Apr 2025 12:33:52 +0100
Subject: [PATCH 2/2] [lldb] Add test main.cpp file
Signed-off-by: Ebuka Ezike <yerimyah1 at gmail.com>
---
.../API/functionalities/thread/jump/main.cpp | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/lldb/test/API/functionalities/thread/jump/main.cpp b/lldb/test/API/functionalities/thread/jump/main.cpp
index d3c0de2af4bf4..9c7f0bcb3b732 100644
--- a/lldb/test/API/functionalities/thread/jump/main.cpp
+++ b/lldb/test/API/functionalities/thread/jump/main.cpp
@@ -13,6 +13,21 @@ T min(T a, T b)
}
}
+int jump_positive_offset() {
+ int var_1 = 10;
+ var_1 = 20; // breakpoint 1
+
+ int var_2 = 40; // jump_offset 1
+ return var_2;
+}
+
+int jump_negative_offset() {
+ int var_3 = 10; // jump_offset 2
+ var_3 = 99;
+
+ return var_3; // breakpoint 2
+}
+
int main ()
{
int i;
@@ -22,5 +37,7 @@ int main ()
i = min(min_i_a, min_i_b); // 3rd marker
j = min(min_j_a, min_j_b); // 4th marker
+ jump_positive_offset();
+ jump_negative_offset();
return 0;
}
More information about the lldb-commits
mailing list