Programmabsturz bei fehlendem Terminal abfangen

Programmabsturz bei fehlendem Terminal abfangen

Diese Frage bezieht sich möglicherweise allgemein auf Unix/Linux, aber ich vermute, dass die Antwort von der Distribution oder Desktop-Umgebung abhängt [ich verwende KDE und Xfce, daher hätte ich gerne eine Antwort, die auf beide zutrifft].

Betrachten Sie diese einfache GTK-App:

#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;
    }

Das Programm stürzt mit SIGSEGV ab, wenn der Benutzer auf „Diese App zum Absturz bringen“ klickt. Wenn ich es vom Terminal aus ausführe, erhalte ich eine Meldung:

$ ~/Skrivbord/gtktest/test 
Hello World
Segmenteringsfel (minnesutskrift skapad)

Und ich bin zufrieden, aber starte es über die Startbox ...

KDE-Startbox

Das Fenster verschwindet nur ohne sichtbaren Hinweis auf einen Programmabsturz. Im letzteren Fall möchte ich eine Meldung sehen, die mir etwas sagt wie

~/Skrivbord/gtktest/testhat einen Segmentierungsfehler verursacht

ähnlich wie bei Windows.

Antwort1

Durch Lesen man 5 corehabe ich herausgefunden, was passiert, wenn ein Programm abstürzt. Durch die Einstellung core_patternkann ich etwas anderes als apportdas starten fork- setuid- setgit- exec zenity.

verwandte Informationen