diff --git a/src/bin/e_alert_main.c b/src/bin/e_alert_main.c index 5cd18904d..1513a91fb 100644 --- a/src/bin/e_alert_main.c +++ b/src/bin/e_alert_main.c @@ -81,9 +81,9 @@ main(int argc, char **argv) else if (i == 2) pid = atoi(argv[i]); // E's pid else if (i == 3) - backtrace_str = argv[i]; - else if (i == 4) exit_gdb = atoi(argv[i]); + else if (i == 4) + backtrace_str = argv[i]; } fprintf(stderr, "exit_gdb: %i\n", exit_gdb); diff --git a/src/bin/e_start_main.c b/src/bin/e_start_main.c index 7b0c8c37c..fa28cc825 100644 --- a/src/bin/e_start_main.c +++ b/src/bin/e_start_main.c @@ -563,8 +563,11 @@ main(int argc, char **argv) #endif /* And call gdb if available */ r = 0; + if (home) { + struct stat st; + /* call e_sys gdb */ snprintf(buffer, sizeof(buffer), "gdb " @@ -585,20 +588,24 @@ main(int argc, char **argv) "%s/.e-crashdump.txt", home); - backtrace_str = strdup(buffer); + /* Check the file was correctly generated (may fail on crappy kernel with ptrace + diable). In which case a manual : echo 0 > /proc/sys/kernel/yama/ptrace_scope + as root is necessary. */ + if (!stat(buffer, &st)) + backtrace_str = strdup(buffer); r = WEXITSTATUS(r); } /* call e_alert */ snprintf(buffer, 4096, backtrace_str ? - "%s/enlightenment/utils/enlightenment_alert %i %i '%s' %i" : - "%s/enlightenment/utils/enlightenment_alert %i %i '%s' %i", + "%s/enlightenment/utils/enlightenment_alert %i %i %i '%s'" : + "%s/enlightenment/utils/enlightenment_alert %i %i %i", eina_prefix_lib_get(pfx), sig.si_signo == SIGSEGV && remember_sigusr1 ? SIGILL : sig.si_signo, child, - backtrace_str, - r); + r, + backtrace_str); r = system(buffer); /* kill e */