diff --git a/lldb/source/Commands/CommandObjectPlatform.cpp b/lldb/source/Commands/CommandObjectPlatform.cpp --- a/lldb/source/Commands/CommandObjectPlatform.cpp +++ b/lldb/source/Commands/CommandObjectPlatform.cpp @@ -1207,8 +1207,12 @@ if (m_options.launch_info.GetExecutableFile()) { Debugger &debugger = GetDebugger(); - if (argc == 0) - target->GetRunArguments(m_options.launch_info.GetArguments()); + if (argc == 0) { + // If no arguments were given to the command, use target.run-args. + Args target_run_args; + target->GetRunArguments(target_run_args); + m_options.launch_info.GetArguments().AppendArguments(target_run_args); + } ProcessSP process_sp(platform_sp->DebugProcess( m_options.launch_info, debugger, *target, error)); diff --git a/lldb/test/API/commands/platform/process/launch/Makefile b/lldb/test/API/commands/platform/process/launch/Makefile new file mode 100644 --- /dev/null +++ b/lldb/test/API/commands/platform/process/launch/Makefile @@ -0,0 +1,3 @@ +C_SOURCES := main.c + +include Makefile.rules diff --git a/lldb/test/API/commands/platform/process/launch/TestPlatformProcessLaunch.py b/lldb/test/API/commands/platform/process/launch/TestPlatformProcessLaunch.py new file mode 100644 --- /dev/null +++ b/lldb/test/API/commands/platform/process/launch/TestPlatformProcessLaunch.py @@ -0,0 +1,59 @@ +""" +Test platform process launch. +""" + +from textwrap import dedent +from lldbsuite.test.lldbtest import TestBase + + +class ProcessLaunchTestCase(TestBase): + NO_DEBUG_INFO_TESTCASE = True + + def setup(self): + self.build() + exe = self.getBuildArtifact("a.out") + self.runCmd("file " + exe) + return (exe, self.getBuildArtifact("stdio.log")) + + def test_process_launch_no_args(self): + # When there are no extra arguments we just have 0, the program name. + exe, outfile = self.setup() + self.runCmd("platform process launch --stdout {} -s".format(outfile)) + self.runCmd("continue") + + with open(outfile) as f: + self.assertEqual(dedent("""\ + Got 1 argument(s). + [0]: {} + """.format(exe)), f.read()) + + def test_process_launch_command_args(self): + exe, outfile = self.setup() + # Arguments given via the command override those in the settings. + self.runCmd("settings set target.run-args D E") + self.runCmd("platform process launch --stdout {} -s -- A B C".format(outfile)) + self.runCmd("continue") + + with open(outfile) as f: + self.assertEqual(dedent("""\ + Got 4 argument(s). + [0]: {} + [1]: A + [2]: B + [3]: C + """.format(exe)), f.read()) + + def test_process_launch_target_args(self): + exe, outfile = self.setup() + # When no arguments are passed via the command, use the setting. + self.runCmd("settings set target.run-args D E") + self.runCmd("platform process launch --stdout {}".format(outfile)) + self.runCmd("continue") + + with open(outfile) as f: + self.assertEqual(dedent("""\ + Got 3 argument(s). + [0]: {} + [1]: D + [2]: E + """.format(exe)), f.read()) \ No newline at end of file diff --git a/lldb/test/API/commands/platform/process/launch/main.c b/lldb/test/API/commands/platform/process/launch/main.c new file mode 100644 --- /dev/null +++ b/lldb/test/API/commands/platform/process/launch/main.c @@ -0,0 +1,8 @@ +#include + +int main(int argc, char const *argv[]) { + printf("Got %d argument(s).\n", argc); + for (int i = 0; i < argc; ++i) + printf("[%d]: %s\n", i, argv[i]); + return 0; +}