Add unconditional logging to debugserver for launch/attach processes
Debugging app launch/attach failures can be difficult because of all of the messages logged to the console on a darwin system; emitting specific messages around critical API calls can make it easier to narrow the search for the console messages related to the failure. <rdar://problem/67220442> Differential revision: https://reviews.llvm.org/D94357
This commit is contained in:
@@ -583,29 +583,34 @@ RNBRunLoopMode RNBRunLoopInferiorExecuting(RNBRemote *remote) {
|
||||
}
|
||||
|
||||
if (set_events & RNBContext::event_proc_thread_exiting) {
|
||||
DNBLog("debugserver's process monitoring thread has exited.");
|
||||
mode = eRNBRunLoopModeExit;
|
||||
}
|
||||
|
||||
if (set_events & RNBContext::event_read_thread_exiting) {
|
||||
// Out remote packet receiving thread exited, exit for now.
|
||||
DNBLog(
|
||||
"debugserver's packet communication to lldb has been shut down.");
|
||||
if (ctx.HasValidProcessID()) {
|
||||
nub_process_t pid = ctx.ProcessID();
|
||||
// TODO: We should add code that will leave the current process
|
||||
// in its current state and listen for another connection...
|
||||
if (ctx.ProcessStateRunning()) {
|
||||
if (ctx.GetDetachOnError()) {
|
||||
DNBLog("debugserver's event read thread is exiting, detaching "
|
||||
"from the inferior process.");
|
||||
DNBProcessDetach(ctx.ProcessID());
|
||||
DNBLog("debugserver has a valid PID %d, it is still running. "
|
||||
"detaching from the inferior process.",
|
||||
pid);
|
||||
DNBProcessDetach(pid);
|
||||
} else {
|
||||
DNBLog("debugserver's event read thread is exiting, killing the "
|
||||
"inferior process.");
|
||||
DNBProcessKill(ctx.ProcessID());
|
||||
DNBLog("debugserver killing the inferior process, pid %d.", pid);
|
||||
DNBProcessKill(pid);
|
||||
}
|
||||
} else {
|
||||
if (ctx.GetDetachOnError()) {
|
||||
DNBLog("debugserver's event read thread is exiting, detaching "
|
||||
"from the inferior process.");
|
||||
DNBProcessDetach(ctx.ProcessID());
|
||||
DNBLog("debugserver has a valid PID %d but it may no longer "
|
||||
"be running, detaching from the inferior process.",
|
||||
pid);
|
||||
DNBProcessDetach(pid);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1104,21 +1109,30 @@ int main(int argc, char *argv[]) {
|
||||
if (optarg && optarg[0]) {
|
||||
if (strcasecmp(optarg, "auto") == 0)
|
||||
g_launch_flavor = eLaunchFlavorDefault;
|
||||
else if (strcasestr(optarg, "posix") == optarg)
|
||||
else if (strcasestr(optarg, "posix") == optarg) {
|
||||
DNBLog(
|
||||
"[LaunchAttach] launch flavor is posix_spawn via cmdline option");
|
||||
g_launch_flavor = eLaunchFlavorPosixSpawn;
|
||||
else if (strcasestr(optarg, "fork") == optarg)
|
||||
} else if (strcasestr(optarg, "fork") == optarg)
|
||||
g_launch_flavor = eLaunchFlavorForkExec;
|
||||
#ifdef WITH_SPRINGBOARD
|
||||
else if (strcasestr(optarg, "spring") == optarg)
|
||||
else if (strcasestr(optarg, "spring") == optarg) {
|
||||
DNBLog(
|
||||
"[LaunchAttach] launch flavor is SpringBoard via cmdline option");
|
||||
g_launch_flavor = eLaunchFlavorSpringBoard;
|
||||
}
|
||||
#endif
|
||||
#ifdef WITH_BKS
|
||||
else if (strcasestr(optarg, "backboard") == optarg)
|
||||
else if (strcasestr(optarg, "backboard") == optarg) {
|
||||
DNBLog("[LaunchAttach] launch flavor is BKS via cmdline option");
|
||||
g_launch_flavor = eLaunchFlavorBKS;
|
||||
}
|
||||
#endif
|
||||
#ifdef WITH_FBS
|
||||
else if (strcasestr(optarg, "frontboard") == optarg)
|
||||
else if (strcasestr(optarg, "frontboard") == optarg) {
|
||||
DNBLog("[LaunchAttach] launch flavor is FBS via cmdline option");
|
||||
g_launch_flavor = eLaunchFlavorFBS;
|
||||
}
|
||||
#endif
|
||||
|
||||
else {
|
||||
@@ -1398,6 +1412,7 @@ int main(int argc, char *argv[]) {
|
||||
dup2(null, STDOUT_FILENO);
|
||||
dup2(null, STDERR_FILENO);
|
||||
} else if (g_applist_opt != 0) {
|
||||
DNBLog("debugserver running in --applist mode");
|
||||
// List all applications we are able to see
|
||||
std::string applist_plist;
|
||||
int err = ListApplications(applist_plist, false, false);
|
||||
@@ -1455,6 +1470,7 @@ int main(int argc, char *argv[]) {
|
||||
mode = eRNBRunLoopModeExit;
|
||||
} else if (g_applist_opt != 0) {
|
||||
// List all applications we are able to see
|
||||
DNBLog("debugserver running in applist mode under lockdown");
|
||||
std::string applist_plist;
|
||||
if (ListApplications(applist_plist, false, false) == 0) {
|
||||
DNBLogDebug("Task list: %s", applist_plist.c_str());
|
||||
@@ -1631,6 +1647,8 @@ int main(int argc, char *argv[]) {
|
||||
const char *proc_name = "<unknown>";
|
||||
if (ctx.ArgumentCount() > 0)
|
||||
proc_name = ctx.ArgumentAtIndex(0);
|
||||
DNBLog("[LaunchAttach] Successfully launched %s (pid = %d).\n",
|
||||
proc_name, ctx.ProcessID());
|
||||
RNBLogSTDOUT("Got a connection, launched process %s (pid = %d).\n",
|
||||
proc_name, ctx.ProcessID());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user