沒有終端時捕獲程式崩潰

沒有終端時捕獲程式崩潰

這個問題可能屬於一般的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)

我很高興,但是通過發射箱啟動它......

KDE 啟動箱

該視窗只是消失,沒有任何關於程式崩潰的明顯通知。在後一種情況下,我希望出現一條訊息,告訴我類似的訊息

~/Skrivbord/gtktest/test導致了分段錯誤

就像我在 Windows 中一樣。

答案1

透過閱讀,man 5 core我發現了程式崩潰時會發生什麼。透過設置,core_pattern我可以啟動除此之外的apport其他東西fork--- 。setuidsetgitexec zenity

相關內容