1 16912 mattman /jds/bin/diff -uprN bug-buddy-2.25.2.old/src/bug-buddy.c bug-buddy-2.25.2/src/bug-buddy.c 2 16912 mattman --- bug-buddy-2.25.2.old/src/bug-buddy.c 2008-12-11 12:35:33.705860000 +0000 3 16912 mattman +++ bug-buddy-2.25.2/src/bug-buddy.c 2008-12-11 12:38:26.475348000 +0000 4 16912 mattman @@ -1096,19 +1096,30 @@ gdb_insert_text (const gchar *stacktrace 5 15576 mattman GtkTextView *text_view; 6 15576 mattman GtkTextIter end; 7 15576 mattman GtkTextBuffer *buffer; 8 15576 mattman + char *gdb = g_find_program_in_path ("gdb"); 9 15576 mattman + char *pstack = g_find_program_in_path ("pstack"); 10 15576 mattman 11 15576 mattman - /* FIXME: These strings are gdb specific, we should add here also dbx */ 12 15576 mattman - const char *bt_step1 = "#1"; 13 15576 mattman - const char *bt_step2 = "#2"; 14 15576 mattman - const char *bt_step3 = "#3"; 15 15576 mattman - 16 15576 mattman - if (!g_strrstr (stacktrace, bt_step1) && 17 15576 mattman - !g_strrstr (stacktrace, bt_step2) && 18 15576 mattman - !g_strrstr (stacktrace, bt_step3)) { 19 15576 mattman - return FALSE; 20 15576 mattman - } 21 15576 mattman - 22 15576 mattman - 23 15576 mattman +#if defined(sun) && defined(__SVR4) 24 15576 mattman + if (pstack) { 25 15576 mattman + g_free (gdb); 26 15576 mattman + gdb = NULL; 27 15576 mattman + } 28 16912 mattman +#endif /* #if defined(sun) && defined(__SVR4) */ 29 15576 mattman + 30 15576 mattman + if (gdb) { 31 15576 mattman + /* FIXME: These strings are gdb specific, we should add here also dbx */ 32 15576 mattman + const char *bt_step1 = "#1"; 33 15576 mattman + const char *bt_step2 = "#2"; 34 15576 mattman + const char *bt_step3 = "#3"; 35 15576 mattman + 36 15576 mattman + if (!g_strrstr (stacktrace, bt_step1) && 37 15576 mattman + !g_strrstr (stacktrace, bt_step2) && 38 15576 mattman + !g_strrstr (stacktrace, bt_step3)) { 39 15576 mattman + g_free (gdb); 40 15576 mattman + g_free (pstack); 41 15576 mattman + return FALSE; 42 15576 mattman + } 43 15576 mattman + } 44 15576 mattman 45 15576 mattman text_view = GTK_TEXT_VIEW (gtk_builder_get_object (ui, "gdb-text")); 46 15576 mattman buffer = gtk_text_view_get_buffer (text_view); 47 16912 mattman @@ -1117,6 +1128,9 @@ gdb_insert_text (const gchar *stacktrace 48 15576 mattman /* add the stacktrace to the GtkTextView */ 49 15576 mattman gtk_text_buffer_insert (buffer, &end, stacktrace, strlen (stacktrace)); 50 15576 mattman 51 15576 mattman + g_free (gdb); 52 15576 mattman + g_free (pstack); 53 15576 mattman + 54 15576 mattman return TRUE; 55 15576 mattman } 56 15576 mattman 57 16912 mattman /jds/bin/diff -uprN bug-buddy-2.25.2.old/src/gdb-buddy.c bug-buddy-2.25.2/src/gdb-buddy.c 58 16912 mattman --- bug-buddy-2.25.2.old/src/gdb-buddy.c 2008-12-11 12:35:33.723199000 +0000 59 16912 mattman +++ bug-buddy-2.25.2/src/gdb-buddy.c 2008-12-11 12:45:14.364972000 +0000 60 16912 mattman @@ -210,11 +210,9 @@ gdb_get_trace (const gchar *app, int pid 61 11947 mattman GIOChannel *ioc; 62 7076 gman GError *error = NULL; 63 11947 mattman GdbData *gdb_data = NULL; 64 7076 gman - char *args[] = { "gdb", 65 7076 gman - "--batch", 66 7076 gman - "--quiet", 67 7076 gman - "--command=" BUDDY_DATADIR "/gdb-cmd", 68 7076 gman - NULL, NULL, NULL }; 69 13892 mattman + char *args[7]; 70 13892 mattman + char *gdb = NULL; 71 13892 mattman + char *pstack = NULL; 72 11947 mattman 73 11947 mattman g_return_val_if_fail (app != NULL, 0); 74 11947 mattman g_return_val_if_fail (*app != '\0', 0); 75 16912 mattman @@ -225,6 +223,29 @@ gdb_get_trace (const gchar *app, int pid 76 11947 mattman 77 11947 mattman d (g_print ("app=%s\n", app)); 78 11947 mattman 79 12480 mattman +#if defined(sun) && defined(__SVR4) 80 13892 mattman + pstack = g_find_program_in_path ("pstack"); 81 15162 mattman + 82 13892 mattman + if (pstack) { 83 13892 mattman + args[0] = pstack; 84 13902 mattman + args[2] = args[3] = args[4] = args[5] = args[6] = NULL; 85 13892 mattman + } else { 86 13892 mattman + gdb = g_find_program_in_path ("gdb"); 87 13892 mattman + args[0] = gdb; 88 13892 mattman + args[1] = "--batch"; 89 13892 mattman + args[2] = "--quiet"; 90 13892 mattman + args[3] = "--command=" BUDDY_DATADIR "/gdb-cmd"; 91 13902 mattman + args[4] = args[5] = args[6] = NULL; 92 13892 mattman + } 93 13892 mattman +#else 94 13892 mattman + gdb = g_find_program_in_path ("gdb"); 95 13892 mattman + args[0] = gdb; 96 13892 mattman + args[1] = "--batch"; 97 13892 mattman + args[2] = "--quiet"; 98 13892 mattman + args[3] = "--command=" BUDDY_DATADIR "/gdb-cmd"; 99 13902 mattman + args[4] = args[5] = args[6] = NULL; 100 13892 mattman +#endif /* defined(sun) && defined(__SVR4) */ 101 11947 mattman + 102 11947 mattman /* apply a SIGCONT to the process */ 103 11947 mattman kill (pid, SIGCONT); 104 7076 gman 105 16912 mattman @@ -249,30 +270,38 @@ gdb_get_trace (const gchar *app, int pid 106 16912 mattman } 107 7076 gman } 108 7076 gman 109 7076 gman - args[0] = g_find_program_in_path ("gdb"); 110 7076 gman - args[4] = long_app; 111 13892 mattman + if (!pstack) 112 15576 mattman + args[4] = long_app; 113 7076 gman 114 11947 mattman if (args[0] == NULL) { 115 11947 mattman d(g_message ("Path: %s", getenv ("PATH"))); 116 11947 mattman g_free (long_app); 117 11947 mattman g_set_error (err, GDB_BUDDY_ERROR, GDB_BUDDY_GDB_NOT_FOUND, 118 11947 mattman - _("GDB could not be found on your system. " 119 7076 gman - "Debugging information will not be obtained.")); 120 11947 mattman + _("%s could not be found on your system. " 121 11947 mattman + "Debugging information will not be obtained."), 122 15162 mattman + pstack != NULL ? "pstack" : "GDB"); 123 16912 mattman + g_free (args[0]); 124 16912 mattman + g_free (long_app); 125 11947 mattman return 0; 126 11947 mattman } 127 11947 mattman 128 11947 mattman d(g_message ("About to debug '%s'", long_app)); 129 11949 mattman 130 11949 mattman - if (!g_file_test (BUDDY_DATADIR "/gdb-cmd", G_FILE_TEST_EXISTS)) { 131 11949 mattman - g_set_error (err, GDB_BUDDY_ERROR, GDB_BUDDY_GDB_CMD_NOT_FOUND, 132 11949 mattman - _("Could not find the gdb-cmd file.\n" 133 11949 mattman - "Please try reinstalling Bug Buddy.")); 134 11949 mattman - g_free (args[0]); 135 11949 mattman - g_free (long_app); 136 11949 mattman - return 0; 137 13892 mattman + if (gdb) { 138 13892 mattman + if (!g_file_test (BUDDY_DATADIR "/gdb-cmd", G_FILE_TEST_EXISTS)) { 139 13892 mattman + g_set_error (err, GDB_BUDDY_ERROR, GDB_BUDDY_GDB_CMD_NOT_FOUND, 140 13892 mattman + _("Could not find the gdb-cmd file.\n" 141 13892 mattman + "Please try reinstalling Bug Buddy.")); 142 15576 mattman + g_free (args[0]); 143 13892 mattman + g_free (long_app); 144 13892 mattman + return 0; 145 16912 mattman + } 146 16912 mattman } 147 11949 mattman 148 11949 mattman - args[5] = g_strdup_printf ("%d", pid); 149 15576 mattman + if (pstack) 150 13892 mattman + args[1] = g_strdup_printf ("%d", pid); 151 13892 mattman + else 152 13892 mattman + args[5] = g_strdup_printf ("%d", pid); 153 11947 mattman 154 11947 mattman if (!g_spawn_async_with_pipes (NULL, args, NULL, 0, NULL, NULL, 155 11947 mattman &gdb_pid, 156 16912 mattman @@ -284,7 +313,10 @@ gdb_get_trace (const gchar *app, int pid 157 11947 mattman error->message); 158 11947 mattman g_error_free (error); 159 15576 mattman g_free (args[0]); 160 11947 mattman - g_free (args[5]); 161 13892 mattman + if (pstack) 162 16912 mattman + g_free (args[1]); 163 13892 mattman + else 164 13892 mattman + g_free (args[5]); 165 11947 mattman g_free (long_app); 166 11947 mattman return 0; 167 11947 mattman } 168 16912 mattman @@ -309,7 +341,10 @@ gdb_get_trace (const gchar *app, int pid 169 11947 mattman g_io_channel_unref (ioc); 170 11947 mattman 171 15576 mattman g_free (args[0]); 172 11947 mattman - g_free (args[5]); 173 13892 mattman + if (pstack) 174 13892 mattman + g_free (args[1]); 175 13892 mattman + else 176 13892 mattman + g_free (args[5]); 177 11947 mattman g_free (long_app); 178 11947 mattman 179 11947 mattman return source_id; 180 16912 mattman /jds/bin/diff -uprN bug-buddy-2.25.2.old/gnome-breakpad/gnome-breakpad.cc bug-buddy-2.25.2/gnome-breakpad/gnome-breakpad.cc 181 16912 mattman --- bug-buddy-2.25.2.old/gnome-breakpad/gnome-breakpad.cc 2008-12-11 12:35:33.736965000 +0000 182 16912 mattman +++ bug-buddy-2.25.2/gnome-breakpad/gnome-breakpad.cc 2008-12-11 12:55:07.314379000 +0000 183 16912 mattman @@ -379,25 +379,50 @@ run_bug_buddy (const gchar *appname, pid 184 15162 mattman static bool 185 15162 mattman run_gdb (const gchar *appname, pid_t pid) 186 15162 mattman { 187 15162 mattman - gchar *exec_str; 188 15162 mattman + gchar *exec_str = NULL; 189 15162 mattman gchar *title; 190 15162 mattman gboolean res; 191 15162 mattman GError *error = NULL; 192 15576 mattman + gchar *gdb = NULL; 193 15162 mattman 194 15162 mattman title = g_strdup_printf ("Debugging %s", appname); 195 15162 mattman 196 15162 mattman +#if defined(sun) && defined(__SVR4) 197 15162 mattman + gdb = g_find_program_in_path("gdb");; 198 15162 mattman + if (gdb) { 199 15162 mattman + exec_str = g_strdup_printf("gnome-terminal " 200 15162 mattman + "--title=\"%s\" " 201 15162 mattman + "--disable-factory " 202 15162 mattman + "--command=\"gdb %s %d\"", 203 15162 mattman + title, appname, (int)pid); 204 15162 mattman + g_free (gdb); 205 15162 mattman + } else { 206 15162 mattman + gchar *dbx = g_find_program_in_path("dbx"); 207 15162 mattman + if (dbx) { 208 15162 mattman + exec_str = g_strdup_printf("gnome-terminal " 209 15162 mattman + "--title=\"%s\" " 210 15162 mattman + "--disable-factory " 211 15162 mattman + "--command=\"dbx /proc/%d/object/a.out %d\"", 212 15162 mattman + title, (int)pid, (int)pid); 213 15162 mattman + } 214 15162 mattman + g_free (dbx); 215 15162 mattman + } 216 15162 mattman +#else 217 15162 mattman exec_str = g_strdup_printf("gnome-terminal " 218 15162 mattman "--title=\"%s\" " 219 15162 mattman "--disable-factory " 220 15162 mattman "--command=\"gdb %s %d\"", 221 15162 mattman title, appname, (int)pid); 222 15162 mattman - g_free (title); 223 15162 mattman - res = g_spawn_command_line_sync (exec_str, NULL, NULL, 224 16912 mattman - NULL, &error); 225 15162 mattman - g_free(exec_str); 226 15162 mattman - if (!res) { 227 15162 mattman - g_warning("Couldn't run debugger\n"); 228 15162 mattman - return false; 229 16912 mattman +#endif /* defined(sun) && defined(__SVR4) */ 230 16912 mattman + g_free (title); 231 16912 mattman + if (exec_str) { 232 16912 mattman + res = g_spawn_command_line_sync (exec_str, NULL, NULL, 233 16912 mattman + NULL, &error); 234 16912 mattman + g_free(exec_str); 235 16912 mattman + if (!res) { 236 16912 mattman + g_warning("Couldn't run debugger\n"); 237 16912 mattman + return false; 238 16912 mattman + } 239 15162 mattman } 240 15162 mattman 241 15162 mattman return true; 242 16912 mattman @@ -406,8 +431,12 @@ run_gdb (const gchar *appname, pid_t pid 243 16912 mattman static void 244 15576 mattman check_if_gdb () 245 15162 mattman { 246 16912 mattman - char *mypath; 247 15162 mattman - gchar *gdb; 248 16912 mattman + char *mypath = NULL; 249 15162 mattman + gchar *gdb = NULL; 250 15162 mattman +#if defined(sun) && defined(__SVR4) 251 15162 mattman + gchar *pstack = NULL; 252 15162 mattman + gchar *dbx = NULL; 253 15162 mattman +#endif /* defined(sun) && defined(__SVR4) */ 254 16912 mattman bool has_debug_symbols = false; 255 15162 mattman char *filename; 256 15162 mattman gchar *appname; 257 16912 mattman @@ -421,22 +450,40 @@ check_if_gdb () 258 15162 mattman 259 15162 mattman appname = g_get_prgname (); 260 15162 mattman pid = getpid (); 261 15162 mattman + 262 15162 mattman +#if defined(sun) && defined(__SVR4) 263 15162 mattman + gdb = g_find_program_in_path ("gdb"); 264 15162 mattman + pstack = g_find_program_in_path ("pstack"); 265 15162 mattman + dbx = g_find_program_in_path ("dbx"); 266 15162 mattman + 267 15162 mattman + if ((gdb || dbx) && g_getenv("GNOME_HACKER")) { 268 15162 mattman +#else 269 15162 mattman gdb = g_find_program_in_path ("gdb"); 270 15162 mattman 271 15162 mattman if (gdb && g_getenv("GNOME_HACKER")) { 272 15162 mattman +#endif /* defined(sun) && defined(__SVR4) */ 273 15162 mattman res = run_gdb (appname, pid); 274 15162 mattman if (!res) 275 15162 mattman _exit (1); 276 16912 mattman _exit(0); 277 15162 mattman } 278 15162 mattman 279 15162 mattman +#if defined(sun) && defined(__SVR4) 280 16912 mattman + mypath = g_strdup_printf ("/proc/%d/object/a.out", (int)pid); 281 15162 mattman +#else 282 16912 mattman mypath = g_file_read_link ("/proc/self/exe", NULL); 283 15162 mattman +#endif /* defined(sun) && defined(__SVR4) */ 284 16912 mattman + 285 16912 mattman if (mypath) 286 16912 mattman has_debug_symbols = elf_has_debug_symbols (mypath); 287 15162 mattman 288 16912 mattman g_free (mypath); 289 16912 mattman 290 15162 mattman +#if defined(sun) && defined(__SVR4) 291 16912 mattman + if (bugbuddy && (gdb || pstack) && has_debug_symbols) { 292 15162 mattman +#else 293 15162 mattman if (bugbuddy && gdb && has_debug_symbols) { 294 15162 mattman +#endif /* defined(sun) && defined(__SVR4) */ 295 15162 mattman res = run_bug_buddy (appname, pid, NULL); 296 15162 mattman if (!res) 297 15162 mattman _exit (1); 298