[lldb-dap] Return an llvm::Error instead of calling exit directly (NFC) (#128951)

Return an `llvm::Error` from `LaunchRunInTerminalTarget` instead of
calling `exit()` directly.
This commit is contained in:
Jonas Devlieghere 2025-02-26 18:34:21 -06:00 committed by GitHub
parent 2761d4ca82
commit f409340cc2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -202,12 +202,13 @@ EXAMPLES:
//
// In case of errors launching the target, a suitable error message will be
// emitted to the debug adaptor.
static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
llvm::StringRef comm_file,
lldb::pid_t debugger_pid, char *argv[]) {
static llvm::Error LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
llvm::StringRef comm_file,
lldb::pid_t debugger_pid,
char *argv[]) {
#if defined(_WIN32)
llvm::errs() << "runInTerminal is only supported on POSIX systems\n";
exit(EXIT_FAILURE);
return llvm::createStringError(
"runInTerminal is only supported on POSIX systems");
#else
// On Linux with the Yama security module enabled, a process can only attach
@ -219,10 +220,8 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
#endif
RunInTerminalLauncherCommChannel comm_channel(comm_file);
if (llvm::Error err = comm_channel.NotifyPid()) {
llvm::errs() << llvm::toString(std::move(err)) << "\n";
exit(EXIT_FAILURE);
}
if (llvm::Error err = comm_channel.NotifyPid())
return err;
// We will wait to be attached with a timeout. We don't wait indefinitely
// using a signal to prevent being paused forever.
@ -233,8 +232,7 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
timeout_env_var != nullptr ? atoi(timeout_env_var) : 20000;
if (llvm::Error err = comm_channel.WaitUntilDebugAdaptorAttaches(
std::chrono::milliseconds(timeout_in_ms))) {
llvm::errs() << llvm::toString(std::move(err)) << "\n";
exit(EXIT_FAILURE);
return err;
}
const char *target = target_arg.getValue();
@ -242,8 +240,8 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
std::string error = std::strerror(errno);
comm_channel.NotifyError(error);
llvm::errs() << error << "\n";
exit(EXIT_FAILURE);
return llvm::createStringError(llvm::inconvertibleErrorCode(),
std::move(error));
#endif
}
@ -471,13 +469,18 @@ int main(int argc, char *argv[]) {
}
}
int target_args_pos = argc;
for (int i = 0; i < argc; i++)
for (int i = 0; i < argc; i++) {
if (strcmp(argv[i], "--launch-target") == 0) {
target_args_pos = i + 1;
break;
}
LaunchRunInTerminalTarget(*target_arg, comm_file->getValue(), pid,
argv + target_args_pos);
}
if (llvm::Error err =
LaunchRunInTerminalTarget(*target_arg, comm_file->getValue(), pid,
argv + target_args_pos)) {
llvm::errs() << llvm::toString(std::move(err)) << '\n';
return EXIT_FAILURE;
}
} else {
llvm::errs() << "\"--launch-target\" requires \"--comm-file\" to be "
"specified\n";