Skip to content

Commit b7a34e9

Browse files
committed
[lldb-dap] Return an llvm::Error instead of calling exit directly (NFC)
Return an `llvm::Error` from `LaunchRunInTerminalTarget` instead of calling `exit()` directly.
1 parent 317461e commit b7a34e9

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

lldb/tools/lldb-dap/lldb-dap.cpp

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,13 @@ static void printHelp(LLDBDAPOptTable &table, llvm::StringRef tool_name) {
197197
//
198198
// In case of errors launching the target, a suitable error message will be
199199
// emitted to the debug adaptor.
200-
static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
201-
llvm::StringRef comm_file,
202-
lldb::pid_t debugger_pid, char *argv[]) {
200+
static llvm::Error LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
201+
llvm::StringRef comm_file,
202+
lldb::pid_t debugger_pid,
203+
char *argv[]) {
203204
#if defined(_WIN32)
204-
llvm::errs() << "runInTerminal is only supported on POSIX systems\n";
205-
exit(EXIT_FAILURE);
205+
return llvm::createStringError(
206+
"runInTerminal is only supported on POSIX systems");
206207
#else
207208

208209
// On Linux with the Yama security module enabled, a process can only attach
@@ -214,10 +215,8 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
214215
#endif
215216

216217
RunInTerminalLauncherCommChannel comm_channel(comm_file);
217-
if (llvm::Error err = comm_channel.NotifyPid()) {
218-
llvm::errs() << llvm::toString(std::move(err)) << "\n";
219-
exit(EXIT_FAILURE);
220-
}
218+
if (llvm::Error err = comm_channel.NotifyPid())
219+
return err;
221220

222221
// We will wait to be attached with a timeout. We don't wait indefinitely
223222
// using a signal to prevent being paused forever.
@@ -228,17 +227,16 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
228227
timeout_env_var != nullptr ? atoi(timeout_env_var) : 20000;
229228
if (llvm::Error err = comm_channel.WaitUntilDebugAdaptorAttaches(
230229
std::chrono::milliseconds(timeout_in_ms))) {
231-
llvm::errs() << llvm::toString(std::move(err)) << "\n";
232-
exit(EXIT_FAILURE);
230+
return err;
233231
}
234232

235233
const char *target = target_arg.getValue();
236234
execvp(target, argv);
237235

238236
std::string error = std::strerror(errno);
239237
comm_channel.NotifyError(error);
240-
llvm::errs() << error << "\n";
241-
exit(EXIT_FAILURE);
238+
return llvm::createStringError(llvm::inconvertibleErrorCode(),
239+
std::move(error));
242240
#endif
243241
}
244242

@@ -469,13 +467,18 @@ int main(int argc, char *argv[]) {
469467
}
470468
}
471469
int target_args_pos = argc;
472-
for (int i = 0; i < argc; i++)
470+
for (int i = 0; i < argc; i++) {
473471
if (strcmp(argv[i], "--launch-target") == 0) {
474472
target_args_pos = i + 1;
475473
break;
476474
}
477-
LaunchRunInTerminalTarget(*target_arg, comm_file->getValue(), pid,
478-
argv + target_args_pos);
475+
}
476+
if (llvm::Error err =
477+
LaunchRunInTerminalTarget(*target_arg, comm_file->getValue(), pid,
478+
argv + target_args_pos)) {
479+
llvm::errs() << llvm::toString(std::move(err)) << '\n';
480+
return EXIT_FAILURE;
481+
}
479482
} else {
480483
llvm::errs() << "\"--launch-target\" requires \"--comm-file\" to be "
481484
"specified\n";

0 commit comments

Comments
 (0)