
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 ...
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/test
hat einen Segmentierungsfehler verursacht
ähnlich wie bei Windows.
Antwort1
Durch Lesen man 5 core
habe ich herausgefunden, was passiert, wenn ein Programm abstürzt. Durch die Einstellung core_pattern
kann ich etwas anderes als apport
das starten fork
- setuid
- setgit
- exec
zenity
.