Home | History | Annotate | Download | only in patches
      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