
這個問題可能屬於一般的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。如果從終端機運行,我會收到一則通知:
$ ~/Skrivbord/gtktest/test
Hello World
Segmenteringsfel (minnesutskrift skapad)
我很高興,但是通過發射箱啟動它......
該視窗只是消失,沒有任何關於程式崩潰的明顯通知。在後一種情況下,我希望出現一條訊息,告訴我類似的訊息
~/Skrivbord/gtktest/test
導致了分段錯誤
就像我在 Windows 中一樣。
答案1
透過閱讀,man 5 core
我發現了程式崩潰時會發生什麼。透過設置,core_pattern
我可以啟動除此之外的apport
其他東西fork
--- 。setuid
setgit
exec
zenity