This revision was automatically updated to reflect the committed changes. Closed by commit rGcc0fc3585405: [LLDB] Fix the use of "platform process launch" with no extra arguments (authored by DavidSpickett).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D153636/new/ https://reviews.llvm.org/D153636 Files: lldb/source/Commands/CommandObjectPlatform.cpp lldb/test/API/commands/platform/process/launch/Makefile lldb/test/API/commands/platform/process/launch/TestPlatformProcessLaunch.py lldb/test/API/commands/platform/process/launch/main.c
Index: lldb/test/API/commands/platform/process/launch/main.c =================================================================== --- /dev/null +++ lldb/test/API/commands/platform/process/launch/main.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +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; +} Index: lldb/test/API/commands/platform/process/launch/TestPlatformProcessLaunch.py =================================================================== --- /dev/null +++ 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 Index: lldb/test/API/commands/platform/process/launch/Makefile =================================================================== --- /dev/null +++ lldb/test/API/commands/platform/process/launch/Makefile @@ -0,0 +1,3 @@ +C_SOURCES := main.c + +include Makefile.rules Index: lldb/source/Commands/CommandObjectPlatform.cpp =================================================================== --- lldb/source/Commands/CommandObjectPlatform.cpp +++ 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));
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits