diff options
author | Alex Langford <apl@fb.com> | 2019-08-19 20:17:27 +0000 |
---|---|---|
committer | Alex Langford <apl@fb.com> | 2019-08-19 20:17:27 +0000 |
commit | 3b4ce731fbcc6490da95d8091b384c3ddb3c70d9 (patch) | |
tree | b01c73ff4c875a906d35d6aa4891b8f5df3f45ed /lldb/packages/Python/lldbsuite/test | |
parent | 928071ae4ef5e2e6342afb126518a79fde81cf8b (diff) | |
download | bcm5719-llvm-3b4ce731fbcc6490da95d8091b384c3ddb3c70d9.tar.gz bcm5719-llvm-3b4ce731fbcc6490da95d8091b384c3ddb3c70d9.zip |
[lldb-vscode] add `launchCommands` to handle launch specific commands
Summary:
This can help `lldb-vscode` handle launch commands associate with remote platform
attach request have field `attachCommands` to handle attach specific commands
add a corresponding one for launch request
if no launch command is provided, create a new target and launch; otherwise, execute the launch command
Differential Revision: https://reviews.llvm.org/D65363
Patch by Wanyi Ye <kusmour@gmail.com>
llvm-svn: 369296
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
3 files changed, 96 insertions, 14 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/TestVSCode_launch.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/TestVSCode_launch.py index bfd8ed702da..dc7635289ed 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/TestVSCode_launch.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/TestVSCode_launch.py @@ -341,3 +341,68 @@ class TestVSCode_launch(lldbvscode_testcase.VSCodeTestCaseBase): # "exitCommands" that were run after the second breakpoint was hit output = self.get_console(timeout=1.0) self.verify_commands('exitCommands', output, exitCommands) + + @skipIfWindows + @skipIfDarwin # Skip this test for now until we can figure out why tings aren't working on build bots + @no_debug_info_test + def test_extra_launch_commands(self): + ''' + Tests the "luanchCommands" with extra launching settings + ''' + self.build_and_create_debug_adaptor() + program = self.getBuildArtifact("a.out") + + source = 'main.c' + first_line = line_number(source, '// breakpoint 1') + second_line = line_number(source, '// breakpoint 2') + # Set target binary and 2 breakoints + # then we can varify the "launchCommands" get run + # also we can verify that "stopCommands" get run as the + # breakpoints get hit + launchCommands = [ + 'target create "%s"' % (program), + 'br s -f main.c -l %d' % first_line, + 'br s -f main.c -l %d' % second_line, + 'run' + ] + + initCommands = ['target list', 'platform list'] + preRunCommands = ['image list a.out', 'image dump sections a.out'] + stopCommands = ['frame variable', 'bt'] + exitCommands = ['expr 2+3', 'expr 3+4'] + self.launch(program, + initCommands=initCommands, + preRunCommands=preRunCommands, + stopCommands=stopCommands, + exitCommands=exitCommands, + launchCommands=launchCommands) + + # Get output from the console. This should contain both the + # "initCommands" and the "preRunCommands". + output = self.get_console() + # Verify all "initCommands" were found in console output + self.verify_commands('initCommands', output, initCommands) + # Verify all "preRunCommands" were found in console output + self.verify_commands('preRunCommands', output, preRunCommands) + + # Verify all "launchCommands" were founc in console output + # After execution, program should launch + self.verify_commands('launchCommands', output, launchCommands) + # Verify the "stopCommands" here + self.continue_to_next_stop() + output = self.get_console(timeout=1.0) + self.verify_commands('stopCommands', output, stopCommands) + + # Continue and hit the second breakpoint. + # Get output from the console. This should contain both the + # "stopCommands" that were run after the first breakpoint was hit + self.continue_to_next_stop() + output = self.get_console(timeout=1.0) + self.verify_commands('stopCommands', output, stopCommands) + + # Continue until the program exits + self.continue_to_exit() + # Get output from the console. This should contain both the + # "exitCommands" that were run after the second breakpoint was hit + output = self.get_console(timeout=1.0) + self.verify_commands('exitCommands', output, exitCommands) diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/lldbvscode_testcase.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/lldbvscode_testcase.py index 662a0570871..cff85346de5 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/lldbvscode_testcase.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/lldbvscode_testcase.py @@ -245,20 +245,17 @@ class VSCodeTestCaseBase(TestBase): self.assertTrue(response['success'], 'attach failed (%s)' % (response['message'])) - def build_and_launch(self, program, args=None, cwd=None, env=None, - stopOnEntry=False, disableASLR=True, - disableSTDIO=False, shellExpandArguments=False, - trace=False, initCommands=None, preRunCommands=None, - stopCommands=None, exitCommands=None, - sourcePath=None, debuggerRoot=None): - '''Build the default Makefile target, create the VSCode debug adaptor, - and launch the process. + def launch(self, program=None, args=None, cwd=None, env=None, + stopOnEntry=False, disableASLR=True, + disableSTDIO=False, shellExpandArguments=False, + trace=False, initCommands=None, preRunCommands=None, + stopCommands=None, exitCommands=None,sourcePath= None, + debuggerRoot=None, launchCommands=None): + '''Sending launch request to vscode ''' - self.build_and_create_debug_adaptor() - self.assertTrue(os.path.exists(program), 'executable must exist') - # Make sure we disconnect and terminate the VSCode debug adaptor even - # if we throw an exception during the test case. + # Make sure we disconnet and terminate the VSCode debug adaptor, + # if we throw an exception during the test case def cleanup(): self.vscode.request_disconnect(terminateDebuggee=True) self.vscode.terminate() @@ -283,7 +280,25 @@ class VSCodeTestCaseBase(TestBase): stopCommands=stopCommands, exitCommands=exitCommands, sourcePath=sourcePath, - debuggerRoot=debuggerRoot) + debuggerRoot=debuggerRoot, + launchCommands=launchCommands) if not (response and response['success']): self.assertTrue(response['success'], 'launch failed (%s)' % (response['message'])) + + def build_and_launch(self, program, args=None, cwd=None, env=None, + stopOnEntry=False, disableASLR=True, + disableSTDIO=False, shellExpandArguments=False, + trace=False, initCommands=None, preRunCommands=None, + stopCommands=None, exitCommands=None, + sourcePath=None, debuggerRoot=None): + '''Build the default Makefile target, create the VSCode debug adaptor, + and launch the process. + ''' + self.build_and_create_debug_adaptor() + self.assertTrue(os.path.exists(program), 'executable must exist') + + self.launch(program, args, cwd, env, stopOnEntry, disableASLR, + disableSTDIO, shellExpandArguments, trace, + initCommands, preRunCommands, stopCommands, exitCommands, + sourcePath, debuggerRoot) diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py index 638c038e169..b4e21989463 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py @@ -558,7 +558,7 @@ class DebugCommunication(object): disableSTDIO=False, shellExpandArguments=False, trace=False, initCommands=None, preRunCommands=None, stopCommands=None, exitCommands=None, sourcePath=None, - debuggerRoot=None): + debuggerRoot=None, launchCommands=None): args_dict = { 'program': program } @@ -591,6 +591,8 @@ class DebugCommunication(object): args_dict['sourcePath'] = sourcePath if debuggerRoot: args_dict['debuggerRoot'] = debuggerRoot + if launchCommands: + args_dict['launchCommands'] = launchCommands command_dict = { 'command': 'launch', 'type': 'request', |