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