
Esta pregunta puede pertenecer a Unix/Linux en general, pero supongo que la respuesta depende de la distribución o del entorno de escritorio [uso KDE y Xfce, así que me gustaría una respuesta que sea aplicable en el stand].
Considere esta sencilla aplicación GTK:
#include <gtk/gtk.h>
static void print_hello(GtkWidget *widget, gpointer data)
{
g_print ("Hello World\n");
// Intentional crash
int* badfood=NULL;
*badfood=1;
}
int main(int argc,char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show (window);
GtkWidget* button = gtk_button_new_with_label ("Crash this app");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);
gtk_main ();
return 0;
}
El programa fallará con SIGSEGV cuando el usuario haga clic en "Bloquear esta aplicación". Si lo ejecuto desde la terminal, aparece un aviso:
$ ~/Skrivbord/gtktest/test
Hello World
Segmenteringsfel (minnesutskrift skapad)
Y estoy feliz, pero empezando por la caja de lanzamiento...
La ventana sólo desaparece sin ningún aviso visible sobre un fallo del programa. En el último caso, quiero que aparezca un mensaje que me diga algo como
~/Skrivbord/gtktest/test
ha causado un fallo de segmentación
muy parecido a lo que tengo en Windows.
Respuesta1
Al leer, man 5 core
descubrí lo que sucede cuando un programa falla. Al configurarlo core_pattern
, puedo iniciar algo más que apport
eso fork
- setuid
- setgit
- exec
zenity
.