Detectar el fallo del programa cuando no hay terminal

Detectar el fallo del programa cuando no hay terminal

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...

Cuadro de inicio de KDE

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/testha causado un fallo de segmentación

muy parecido a lo que tengo en Windows.

Respuesta1

Al leer, man 5 coredescubrí lo que sucede cuando un programa falla. Al configurarlo core_pattern, puedo iniciar algo más que apporteso fork- setuid- setgit- exec zenity.

información relacionada