Pegue o travamento do programa quando não há terminal

2

Esta questão pode pertencer ao Unix / Linux em geral, mas eu acho que a resposta depende da distro ou do ambiente desktop [eu uso o KDE e o Xfce, então gostaria de uma resposta aplicável no booth].

Considere este aplicativo GTK simples:

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

O programa irá travar com o SIGSEGV quando o usuário clicar em "Crash this app". Se fugir do terminal, recebo um aviso:

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

E eu estou feliz, mas começando pela caixa de lançamento ...

A janela apenas desaparece sem qualquer aviso visível sobre uma falha do programa. No último caso, quero que uma mensagem apareça dizendo algo como

  

~/Skrivbord/gtktest/test causou uma falha de segmentação

muito parecido com o que acontece no Windows.

    
por user877329 11.03.2015 / 09:43

1 resposta

1

Ao ler man 5 core , descobri o que acontece quando um programa falha. Ao definir core_pattern , posso iniciar algo diferente de apport que fork - setuid - setgit - exec zenity .

    
por user877329 01.05.2015 / 11:41