[Lldb-commits] [lldb] 728101f - Reland "[LLDB] Fix the use of "platform process launch" with no extra arguments"

David Spickett via lldb-commits lldb-commits at lists.llvm.org
Thu Jun 29 01:21:54 PDT 2023


Author: David Spickett
Date: 2023-06-29T08:21:42Z
New Revision: 728101f97286c1665814e74686c083a4d5ff208c

URL: https://github.com/llvm/llvm-project/commit/728101f97286c1665814e74686c083a4d5ff208c
DIFF: https://github.com/llvm/llvm-project/commit/728101f97286c1665814e74686c083a4d5ff208c.diff

LOG: Reland "[LLDB] Fix the use of "platform process launch" with no extra arguments"

This reverts commit 3254623d73fb7252385817d8057640c9d5d5ffd1.

One test has been updated to add the "-s" flag which along with
86fd957af981f146a306831608d7ad2de65b9560 should fix the tests on MacOS.

An assert on hijack listener added in that patch was removed, it seems
to be correct on MacOS but not on Linux.

Added: 
    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

Modified: 
    lldb/source/Commands/CommandObjectPlatform.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Commands/CommandObjectPlatform.cpp b/lldb/source/Commands/CommandObjectPlatform.cpp
index e44a8975cf291c..54115b51be78e4 100644
--- a/lldb/source/Commands/CommandObjectPlatform.cpp
+++ b/lldb/source/Commands/CommandObjectPlatform.cpp
@@ -1208,8 +1208,12 @@ class CommandObjectPlatformProcessLaunch : public CommandObjectParsed {
       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));
@@ -1229,8 +1233,6 @@ class CommandObjectPlatformProcessLaunch : public CommandObjectParsed {
             !synchronous_execution &&
             launch_info.GetFlags().Test(eLaunchFlagStopAtEntry);
 
-        assert(launch_info.GetHijackListener());
-
         EventSP first_stop_event_sp;
         StateType state = process_sp->WaitForProcessToStop(
             std::nullopt, &first_stop_event_sp, rebroadcast_first_stop,

diff  --git a/lldb/test/API/commands/platform/process/launch/Makefile b/lldb/test/API/commands/platform/process/launch/Makefile
new file mode 100644
index 00000000000000..10495940055b63
--- /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
index 00000000000000..3312cb04832ab7
--- /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 {} -s".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
index 00000000000000..84208372bc4d12
--- /dev/null
+++ b/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;
+}


        


More information about the lldb-commits mailing list