This is an ongoing series of commits that are reformatting our Python code. Reformatting is done with `black` (23.1.0). If you end up having problems merging this commit because you have made changes to a python file, the best way to handle that is to run `git checkout --ours <yourfile>` and then reformat it with black. RFC: https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style Differential revision: https://reviews.llvm.org/D151460
112 lines
4.1 KiB
Python
112 lines
4.1 KiB
Python
"""
|
|
Test lldb-vscode RestartRequest.
|
|
"""
|
|
|
|
import os
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import line_number
|
|
import lldbvscode_testcase
|
|
|
|
|
|
class TestVSCode_restart_runInTerminal(lldbvscode_testcase.VSCodeTestCaseBase):
|
|
def isTestSupported(self):
|
|
try:
|
|
# We skip this test for debug builds because it takes too long
|
|
# parsing lldb's own debug info. Release builds are fine.
|
|
# Checking the size of the lldb-vscode binary seems to be a decent
|
|
# proxy for a quick detection. It should be far less than 1 MB in
|
|
# Release builds.
|
|
return os.path.getsize(os.environ["LLDBVSCODE_EXEC"]) < 1000000
|
|
except:
|
|
return False
|
|
|
|
@skipIfWindows
|
|
@skipIfRemote
|
|
@skipIf(archs=["arm"]) # Always times out on buildbot
|
|
def test_basic_functionality(self):
|
|
"""
|
|
Test basic restarting functionality when the process is running in
|
|
a terminal.
|
|
"""
|
|
if not self.isTestSupported():
|
|
return
|
|
line_A = line_number("main.c", "// breakpoint A")
|
|
line_B = line_number("main.c", "// breakpoint B")
|
|
|
|
program = self.getBuildArtifact("a.out")
|
|
self.build_and_launch(program, runInTerminal=True)
|
|
[bp_A, bp_B] = self.set_source_breakpoints("main.c", [line_A, line_B])
|
|
|
|
# Verify we hit A, then B.
|
|
self.vscode.request_configurationDone()
|
|
self.verify_breakpoint_hit([bp_A])
|
|
self.vscode.request_continue()
|
|
self.verify_breakpoint_hit([bp_B])
|
|
|
|
# Make sure i has been modified from its initial value of 0.
|
|
self.assertEquals(
|
|
int(self.vscode.get_local_variable_value("i")),
|
|
1234,
|
|
"i != 1234 after hitting breakpoint B",
|
|
)
|
|
|
|
# Restart.
|
|
self.vscode.request_restart()
|
|
|
|
# Finally, check we stop back at A and program state has been reset.
|
|
self.verify_breakpoint_hit([bp_A])
|
|
self.assertEquals(
|
|
int(self.vscode.get_local_variable_value("i")),
|
|
0,
|
|
"i != 0 after hitting breakpoint A on restart",
|
|
)
|
|
|
|
@skipIfWindows
|
|
@skipIfRemote
|
|
@skipIf(archs=["arm"]) # Always times out on buildbot
|
|
def test_stopOnEntry(self):
|
|
"""
|
|
Check that stopOnEntry works correctly when using runInTerminal.
|
|
"""
|
|
if not self.isTestSupported():
|
|
return
|
|
line_A = line_number("main.c", "// breakpoint A")
|
|
line_B = line_number("main.c", "// breakpoint B")
|
|
|
|
program = self.getBuildArtifact("a.out")
|
|
self.build_and_launch(program, runInTerminal=True, stopOnEntry=True)
|
|
[bp_main] = self.set_function_breakpoints(["main"])
|
|
self.vscode.request_configurationDone()
|
|
|
|
# When using stopOnEntry, configurationDone doesn't result in a running
|
|
# process, we should immediately get a stopped event instead.
|
|
stopped_events = self.vscode.wait_for_stopped()
|
|
# We should be stopped at the entry point.
|
|
for stopped_event in stopped_events:
|
|
if "body" in stopped_event:
|
|
body = stopped_event["body"]
|
|
if "reason" in body:
|
|
reason = body["reason"]
|
|
self.assertNotEqual(
|
|
reason, "breakpoint", "verify stop isn't a breakpoint"
|
|
)
|
|
|
|
# Then, if we continue, we should hit the breakpoint at main.
|
|
self.vscode.request_continue()
|
|
self.verify_breakpoint_hit([bp_main])
|
|
|
|
# Restart and check that we still get a stopped event before reaching
|
|
# main.
|
|
self.vscode.request_restart()
|
|
stopped_events = self.vscode.wait_for_stopped()
|
|
for stopped_event in stopped_events:
|
|
if "body" in stopped_event:
|
|
body = stopped_event["body"]
|
|
if "reason" in body:
|
|
reason = body["reason"]
|
|
self.assertNotEqual(
|
|
reason,
|
|
"breakpoint",
|
|
'verify stop after restart isn\'t "main" breakpoint',
|
|
)
|