Skip to content

Commit 6ab61ef

Browse files
committed
[lldb] Add test for jumping by offset
Signed-off-by: Ebuka Ezike <[email protected]>
1 parent 73fc956 commit 6ab61ef

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

lldb/test/API/functionalities/thread/jump/TestThreadJump.py

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010

1111

1212
class ThreadJumpTestCase(TestBase):
13+
def setUp(self):
14+
TestBase.setUp(self)
15+
self.build()
16+
1317
def test(self):
1418
"""Test thread jump handling."""
15-
self.build()
1619
exe = self.getBuildArtifact("a.out")
1720
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
1821

@@ -62,6 +65,71 @@ def test(self):
6265
substrs=["error"],
6366
)
6467

68+
def test_jump_offset(self):
69+
"""Test Thread Jump by negative or positive offset"""
70+
exe = self.getBuildArtifact("a.out")
71+
file_name = "main.cpp"
72+
self.runCmd(f"target create {exe}", CURRENT_EXECUTABLE_SET)
73+
74+
pos_jump = line_number(file_name, "// jump_offset 1")
75+
neg_jump = line_number(file_name, "// jump_offset 2")
76+
pos_breakpoint = line_number(file_name, "// breakpoint 1")
77+
neg_breakpoint = line_number(file_name, "// breakpoint 2")
78+
pos_jump_offset = pos_jump - pos_breakpoint
79+
neg_jump_offset = neg_jump - neg_breakpoint
80+
81+
var_1, var_1_value = ("var_1", "10")
82+
var_2, var_2_value = ("var_2", "40")
83+
var_3, var_3_value = ("var_3", "10")
84+
85+
# create pos_breakpoint and neg_breakpoint
86+
lldbutil.run_break_set_by_file_and_line(
87+
self, file_name, pos_breakpoint, num_expected_locations=1
88+
)
89+
lldbutil.run_break_set_by_file_and_line(
90+
self, file_name, neg_breakpoint, num_expected_locations=1
91+
)
92+
93+
self.runCmd("run", RUN_SUCCEEDED)
94+
95+
# test positive jump
96+
# The stop reason of the thread should be breakpoint 1.
97+
self.expect(
98+
"thread list",
99+
STOPPED_DUE_TO_BREAKPOINT + " 1",
100+
substrs=[
101+
"stopped",
102+
f"{file_name}:{pos_breakpoint}",
103+
"stop reason = breakpoint 1",
104+
],
105+
)
106+
107+
self.runCmd(f"thread jump --by +{pos_jump_offset}")
108+
self.expect("process status", substrs=[f"at {file_name}:{pos_jump}"])
109+
self.expect(f"print {var_1}", substrs=[var_1_value])
110+
111+
self.runCmd("thread step-over")
112+
self.expect(f"print {var_2}", substrs=[var_2_value])
113+
114+
self.runCmd("continue")
115+
116+
# test negative jump
117+
# The stop reason of the thread should be breakpoint 1.
118+
self.expect(
119+
"thread list",
120+
STOPPED_DUE_TO_BREAKPOINT + " 2",
121+
substrs=[
122+
"stopped",
123+
f"{file_name}:{neg_breakpoint}",
124+
"stop reason = breakpoint 2",
125+
],
126+
)
127+
128+
self.runCmd(f"thread jump --by {neg_jump_offset}")
129+
self.expect("process status", substrs=[f"at {file_name}:{neg_jump}"])
130+
self.runCmd("thread step-over")
131+
self.expect(f"print {var_3}", substrs=[var_3_value])
132+
65133
def do_min_test(self, start, jump, var, value):
66134
# jump to the start marker
67135
self.runCmd("j %i" % start)

0 commit comments

Comments
 (0)