
Этот вопрос может относиться к 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)
И я счастлив, но запуск через пусковую коробку...
Окно просто исчезает без видимого уведомления о сбое программы. В последнем случае я хочу, чтобы появилось сообщение, говорящее мне что-то вроде
~/Skrivbord/gtktest/test
вызвал ошибку сегментации
очень похоже на то, что я получаю в Windows.
решение1
Читая, man 5 core
я узнал, что происходит, когда программа вылетает. Установив core_pattern
, я могу запустить что-то другое, чем apport
это fork
- setuid
- setgit
- exec
zenity
.