[Lldb-commits] [lldb] ae8facc - [lldb-dap] Do not write over the existing error if launchCommands fail during debugger launch. (#82051)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Feb 20 09:35:19 PST 2024
Author: John Harrison
Date: 2024-02-20T09:35:15-08:00
New Revision: ae8facc1f8e8a2d04b5a3519fc1901db110fe452
URL: https://github.com/llvm/llvm-project/commit/ae8facc1f8e8a2d04b5a3519fc1901db110fe452
DIFF: https://github.com/llvm/llvm-project/commit/ae8facc1f8e8a2d04b5a3519fc1901db110fe452.diff
LOG: [lldb-dap] Do not write over the existing error if launchCommands fail during debugger launch. (#82051)
This fixes an issue where the error is lost if a command while executing
`launchCommands` when launching the debugger.
This should fix #82048
Added:
Modified:
lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
lldb/test/API/tools/lldb-dap/launch/TestDAP_launch.py
lldb/tools/lldb-dap/lldb-dap.cpp
Removed:
################################################################################
diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
index 73bd037fd328cb..288cc8cf9a48c8 100644
--- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
+++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py
@@ -122,6 +122,8 @@ def verify_commands(self, flavor, output, commands):
for cmd in commands:
found = False
for line in lines:
+ if len(cmd) > 0 and (cmd[0] == "!" or cmd[0] == "?"):
+ cmd = cmd[1:]
if line.startswith(prefix) and cmd in line:
found = True
break
diff --git a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch.py b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch.py
index 829fb3b7ba6a4c..04d741c1d47201 100644
--- a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch.py
+++ b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch.py
@@ -2,7 +2,6 @@
Test lldb-dap setBreakpoints request
"""
-
import dap_server
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
@@ -398,7 +397,7 @@ def test_extra_launch_commands(self):
# Verify all "preRunCommands" were found in console output
self.verify_commands("preRunCommands", output, preRunCommands)
- # Verify all "launchCommands" were founc in console output
+ # Verify all "launchCommands" were found in console output
# After execution, program should launch
self.verify_commands("launchCommands", output, launchCommands)
# Verify the "stopCommands" here
@@ -420,6 +419,47 @@ def test_extra_launch_commands(self):
output = self.get_console(timeout=1.0)
self.verify_commands("exitCommands", output, exitCommands)
+ @skipIfWindows
+ @skipIfRemote
+ def test_failing_launch_commands(self):
+ """
+ Tests "launchCommands" failures prevents a launch.
+ """
+ self.build_and_create_debug_adaptor()
+ program = self.getBuildArtifact("a.out")
+
+ # Run an invalid launch command, in this case a bad path.
+ launchCommands = ['!target create "/bad/path%s"' % (program)]
+
+ initCommands = ["target list", "platform list"]
+ preRunCommands = ["image list a.out", "image dump sections a.out"]
+ response = self.launch(
+ program,
+ initCommands=initCommands,
+ preRunCommands=preRunCommands,
+ launchCommands=launchCommands,
+ expectFailure=True,
+ )
+
+ self.assertFalse(response["success"])
+ self.assertRegex(
+ response["message"],
+ r"Failed to run launch commands\. See the Debug Console for more details",
+ )
+
+ # 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
+ # The launch should fail due to the invalid command.
+ self.verify_commands("launchCommands", output, launchCommands)
+ self.assertRegex(output, r"unable to find executable for '/bad/path/")
+
@skipIfWindows
@skipIfNetBSD # Hangs on NetBSD as well
@skipIf(archs=["arm", "aarch64"], oslist=["linux"])
diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp
index 67022347e6d624..78b0b4078706aa 100644
--- a/lldb/tools/lldb-dap/lldb-dap.cpp
+++ b/lldb/tools/lldb-dap/lldb-dap.cpp
@@ -1779,8 +1779,10 @@ lldb::SBError LaunchProcess(const llvm::json::Object &request) {
// Set the launch info so that run commands can access the configured
// launch details.
g_dap.target.SetLaunchInfo(launch_info);
- if (llvm::Error err = g_dap.RunLaunchCommands(launchCommands))
+ if (llvm::Error err = g_dap.RunLaunchCommands(launchCommands)) {
error.SetErrorString(llvm::toString(std::move(err)).c_str());
+ return error;
+ }
// The custom commands might have created a new target so we should use the
// selected target after these commands are run.
g_dap.target = g_dap.debugger.GetSelectedTarget();
More information about the lldb-commits
mailing list