Merge "Output correct gdbserver instructions from debuggerd."
This commit is contained in:
commit
9cb0b5719c
1 changed files with 34 additions and 14 deletions
|
|
@ -92,20 +92,43 @@ static void disable_debug_led() {
|
|||
}
|
||||
|
||||
static void wait_for_user_action(pid_t pid) {
|
||||
// First log a helpful message
|
||||
// Find out the name of the process that crashed.
|
||||
char path[64];
|
||||
snprintf(path, sizeof(path), "/proc/%d/exe", pid);
|
||||
|
||||
char exe[PATH_MAX];
|
||||
int count;
|
||||
if ((count = readlink(path, exe, sizeof(exe) - 1)) == -1) {
|
||||
LOG("readlink('%s') failed: %s", path, strerror(errno));
|
||||
strlcpy(exe, "unknown", sizeof(exe));
|
||||
} else {
|
||||
exe[count] = '\0';
|
||||
}
|
||||
|
||||
// Turn "/system/bin/app_process" into "app_process".
|
||||
// gdbserver doesn't cope with full paths (though we should fix that
|
||||
// and remove this).
|
||||
char* name = strrchr(exe, '/');
|
||||
if (name == NULL) {
|
||||
name = exe; // No '/' found.
|
||||
} else {
|
||||
++name; // Skip the '/'.
|
||||
}
|
||||
|
||||
// Explain how to attach the debugger.
|
||||
LOG( "********************************************************\n"
|
||||
"* Process %d has been suspended while crashing. To\n"
|
||||
"* attach gdbserver for a gdb connection on port 5039\n"
|
||||
"* Process %d has been suspended while crashing.\n"
|
||||
"* To attach gdbserver for a gdb connection on port 5039\n"
|
||||
"* and start gdbclient:\n"
|
||||
"*\n"
|
||||
"* gdbclient app_process :5039 %d\n"
|
||||
"* gdbclient %s :5039 %d\n"
|
||||
"*\n"
|
||||
"* Wait for gdb to start, then press HOME or VOLUME DOWN key\n"
|
||||
"* Wait for gdb to start, then press the VOLUME DOWN key\n"
|
||||
"* to let the process continue crashing.\n"
|
||||
"********************************************************\n",
|
||||
pid, pid);
|
||||
pid, name, pid);
|
||||
|
||||
// wait for HOME or VOLUME DOWN key
|
||||
// Wait for VOLUME DOWN.
|
||||
if (init_getevent() == 0) {
|
||||
int ms = 1200 / 10;
|
||||
int dit = 1;
|
||||
|
|
@ -118,17 +141,14 @@ static void wait_for_user_action(pid_t pid) {
|
|||
};
|
||||
size_t s = 0;
|
||||
input_event e;
|
||||
bool done = false;
|
||||
init_debug_led();
|
||||
enable_debug_led();
|
||||
do {
|
||||
while (true) {
|
||||
int timeout = abs(codes[s]) * ms;
|
||||
int res = get_event(&e, timeout);
|
||||
if (res == 0) {
|
||||
if (e.type == EV_KEY
|
||||
&& (e.code == KEY_HOME || e.code == KEY_VOLUMEDOWN)
|
||||
&& e.value == 0) {
|
||||
done = true;
|
||||
if (e.type == EV_KEY && e.code == KEY_VOLUMEDOWN && e.value == 0) {
|
||||
break;
|
||||
}
|
||||
} else if (res == 1) {
|
||||
if (++s >= sizeof(codes)/sizeof(*codes))
|
||||
|
|
@ -139,7 +159,7 @@ static void wait_for_user_action(pid_t pid) {
|
|||
disable_debug_led();
|
||||
}
|
||||
}
|
||||
} while (!done);
|
||||
}
|
||||
uninit_getevent();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue