1 7076 gman diff -urN bug-buddy-2.12.1/configure.in bug-buddy-2.12.1-hacked/configure.in 2 7076 gman --- bug-buddy-2.12.1/configure.in 2005-10-01 14:38:24.000000000 +1200 3 7076 gman +++ bug-buddy-2.12.1-hacked/configure.in 2005-10-26 16:10:33.689331000 +1300 4 7076 gman @@ -86,7 +86,12 @@ 5 7076 gman fi 6 7076 gman AC_DEFINE_UNQUOTED(GNOMELIBEXECDIR, "$GNOMELIBEXECDIR", [Libexec directory]) 7 7076 gman 8 7076 gman - 9 7076 gman +AC_CANONICAL_HOST 10 7076 gman +case "$host" in 11 7076 gman +*solaris*) 12 7076 gman + AC_DEFINE(SOLARIS,1,Define to 1 if solaris) 13 7076 gman + ;; 14 7076 gman +esac 15 7076 gman 16 7076 gman AC_OUTPUT([ 17 7076 gman bug-buddy.spec 18 7076 gman diff -urN bug-buddy-2.12.1/src/gdb-buddy.c bug-buddy-2.12.1-hacked/src/gdb-buddy.c 19 7076 gman --- bug-buddy-2.12.1/src/gdb-buddy.c 2005-07-20 06:49:18.000000000 +1200 20 7076 gman +++ bug-buddy-2.12.1-hacked/src/gdb-buddy.c 2005-10-26 16:40:09.449769000 +1300 21 7076 gman @@ -152,15 +152,28 @@ 22 7076 gman int status; 23 7076 gman FILE *f; 24 7076 gman 25 7076 gman - gdb_cmd = g_strdup_printf ("gdb --batch --core=%s", core_file); 26 7076 gman + gboolean use_pstack = FALSE; 27 7076 gman + 28 7076 gman +#ifdef SOLARIS 29 7076 gman + char *gdb = g_find_program_in_path ("gdb"); 30 7076 gman + if (gdb) 31 7076 gman +#endif 32 7076 gman + gdb_cmd = g_strdup_printf ("gdb --batch --core=%s", core_file); 33 7076 gman +#ifdef SOLARIS 34 7076 gman + else { 35 7076 gman + gdb_cmd = g_strdup_printf ("pstack %s", core_file); 36 7076 gman + use_pstack = TRUE; 37 7076 gman + } 38 7076 gman +#endif 39 7076 gman 40 7076 gman f = popen (gdb_cmd, "r"); 41 7076 gman g_free (gdb_cmd); 42 7076 gman 43 7076 gman if (!f) { 44 7076 gman buddy_error (GET_WIDGET ("druid-window"), 45 7076 gman - _("Unable to process core file with gdb:\n" 46 7076 gman + _("Unable to process core file with %s:\n" 47 7076 gman "'%s'"), 48 7076 gman + use_pstack ? "pstack" : "gdb", 49 7076 gman core_file); 50 7076 gman return; 51 7076 gman } 52 7076 gman @@ -178,14 +191,31 @@ 53 7076 gman binary = g_strdup(s); 54 7076 gman } 55 7076 gman } 56 7076 gman +#ifdef SOLARIS 57 7076 gman + else if (!binary && !strncmp(buf, "core ", 4)) { 58 7076 gman + gchar *s; 59 7076 gman + gchar *ptr = buf; 60 7076 gman + while (*ptr != ':' && *ptr !='\0') ptr++; 61 7076 gman + if (*ptr == ':') { 62 7076 gman + ptr++; 63 7076 gman + while (*ptr == ' ' || *ptr == '\t') ptr++; 64 7076 gman + s = ptr; 65 7076 gman + while (*ptr !='\0') ptr++; 66 7076 gman + *ptr = '\0'; 67 7076 gman + binary = g_strdup(s); 68 7076 gman + } 69 7076 gman + } 70 7076 gman +#endif 71 7076 gman + 72 7076 gman } 73 7076 gman 74 7076 gman status = pclose(f); 75 7076 gman 76 7076 gman if (!binary) { 77 7076 gman buddy_error (GET_WIDGET ("druid-window"), 78 7076 gman - _("GDB was unable to determine which binary created\n" 79 7076 gman + _("%s was unable to determine which binary created\n" 80 7076 gman "'%s'"), 81 7076 gman + use_pstack ? "pstack" : "gdb", 82 7076 gman core_file); 83 7076 gman return; 84 7076 gman } 85 7076 gman @@ -254,17 +284,33 @@ 86 7076 gman const char *short_app; 87 7076 gman char *long_app; 88 7076 gman GError *error = NULL; 89 7076 gman - char *args[] = { "gdb", 90 7076 gman - "--batch", 91 7076 gman - "--quiet", 92 7076 gman - "--command=" BUDDY_DATADIR "/gdb-cmd", 93 7076 gman - NULL, NULL, NULL }; 94 7076 gman - 95 7076 gman - if (!app || !extra || !*app || !*extra) { 96 7076 gman + char *args[7]; 97 7076 gman + char *gdb = g_find_program_in_path ("gdb"); 98 7076 gman + gboolean use_pstack = FALSE; 99 7076 gman + 100 7076 gman + if (!app || !extra || !*app || !*extra) { 101 7076 gman buddy_error (GET_WIDGET ("druid-window"), 102 7076 gman _("Both a binary file and PID are required to debug.")); 103 7076 gman - return; 104 7076 gman + return; 105 7076 gman } 106 7076 gman + 107 7076 gman + if (gdb) { 108 7076 gman + args[0] = gdb; 109 7076 gman + args[1] = "--batch"; 110 7076 gman + args[2] = "--quiet"; 111 7076 gman + args[3] = "--command=" BUDDY_DATADIR "/gdb-cmd"; 112 7076 gman + args[4] = NULL; 113 7076 gman + args[5] = (char *)extra; 114 7076 gman + args[6] = NULL; 115 7076 gman + } 116 7076 gman +#ifdef SOLARIS 117 7076 gman + else { 118 7076 gman + args[0] = g_find_program_in_path ("pstack"); 119 7076 gman + args[1] = (char *)extra; 120 7076 gman + args[2] = args[3] = args[4] = args[5] = args[6] = NULL; 121 7076 gman + use_pstack = TRUE; 122 7076 gman + } 123 7076 gman +#endif 124 7076 gman 125 7076 gman if (app[0] == G_DIR_SEPARATOR) { 126 7076 gman long_app = g_strdup (app); 127 7076 gman @@ -287,14 +333,13 @@ 128 7076 gman return; 129 7076 gman } 130 7076 gman 131 7076 gman - args[0] = g_find_program_in_path ("gdb"); 132 7076 gman - args[4] = long_app; 133 7076 gman - args[5] = (char *)extra; 134 7076 gman + if (!use_pstack) 135 7076 gman + args[4] = long_app; 136 7076 gman 137 7076 gman if (!args[0]) { 138 7076 gman buddy_error (GET_WIDGET ("druid-window"), 139 7076 gman - _("GDB could not be found on your system.\n" 140 7076 gman - "Debugging information will not be obtained.")); 141 7076 gman + _("%s could not be found on your system.\n" 142 7076 gman + "Debugging information will not be obtained."), use_pstack ? "pstack" : "gdb"); 143 7076 gman d(g_message ("Path: %s", getenv ("PATH"))); 144 7076 gman } else { 145 7076 gman d(g_message ("About to debug '%s'", long_app)); 146 7076 gman @@ -309,7 +354,7 @@ 147 7076 gman &druid_data.fd, 148 7076 gman NULL, &error)) { 149 7076 gman buddy_error (GTK_WIDGET ("druid-window"), 150 7076 gman - _("There was an error running gdb:\n\n%s"), 151 7076 gman + _("There was an error running %s:\n\n%s"), use_pstack ? "pstack" : "gdb", 152 7076 gman error->message); 153 7076 gman g_error_free (error); 154 7076 gman } else { 155