Отловить сбой программы при отсутствии терминала

Отловить сбой программы при отсутствии терминала

Этот вопрос может относиться к Unix/Linux в целом, но я полагаю, что ответ зависит от дистрибутива или среды рабочего стола [я использую KDE и Xfce, поэтому мне бы хотелось получить ответ, применимый на стенде].

Рассмотрим это простое приложение 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;
    }

Программа вылетает с SIGSEGV, когда пользователь нажимает «Crash this app». Если запустить из терминала, я получаю уведомление:

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

И я счастлив, но запуск через пусковую коробку...

Окно запуска KDE

Окно просто исчезает без видимого уведомления о сбое программы. В последнем случае я хочу, чтобы появилось сообщение, говорящее мне что-то вроде

~/Skrivbord/gtktest/testвызвал ошибку сегментации

очень похоже на то, что я получаю в Windows.

решение1

Читая, man 5 coreя узнал, что происходит, когда программа вылетает. Установив core_pattern, я могу запустить что-то другое, чем apportэто fork- setuid- setgit- exec zenity.

Связанный контент