}
gboolean
-mono_gdb_render_native_backtraces ()
+mono_gdb_render_native_backtraces (pid_t crashed_pid)
{
const char *argv [5];
char gdb_template [] = "/tmp/mono-gdb-commands.XXXXXX";
if (mkstemp (gdb_template) != -1) {
FILE *gdb_commands = fopen (gdb_template, "w");
- fprintf (gdb_commands, "attach %ld\n", (long) getpid ());
+ fprintf (gdb_commands, "attach %ld\n", (long) crashed_pid);
fprintf (gdb_commands, "info threads\n");
fprintf (gdb_commands, "thread apply all bt\n");
pid_t pid;
int status;
char buffer [1024];
+ pid_t crashed_pid = getpid ();
res = pipe (stdout_pipe);
g_assert (res != -1);
for (i = getdtablesize () - 1; i >= 3; i--)
close (i);
- if (!mono_gdb_render_native_backtraces ())
+ if (!mono_gdb_render_native_backtraces (crashed_pid))
close (STDOUT_FILENO);
exit (1);
}
gboolean
-mono_gdb_render_native_backtraces ()
+mono_gdb_render_native_backtraces (pid_t crashed_pid)
{
const char *argv [9];
char buf1 [128];
}
argv [1] = "-ex";
- sprintf (buf1, "attach %ld", (long)getpid ());
+ sprintf (buf1, "attach %ld", (long) crashed_pid);
argv [2] = buf1;
argv [3] = "--ex";
argv [4] = "info threads";
void mono_runtime_shutdown_stat_profiler (void) MONO_INTERNAL;
void mono_runtime_posix_install_handlers (void) MONO_INTERNAL;
pid_t mono_runtime_syscall_fork (void) MONO_INTERNAL;
-gboolean mono_gdb_render_native_backtraces (void) MONO_INTERNAL;
+gboolean mono_gdb_render_native_backtraces (pid_t crashed_pid) MONO_INTERNAL;
/*
* Signal handling