터미널이 없을 때 프로그램 충돌 잡기

터미널이 없을 때 프로그램 충돌 잡기

이 질문은 일반적으로 Unix/Linux에 속할 수 있지만 대답은 distro 또는 데스크탑 환경에 따라 달라질 것 같습니다. [저는 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의 다른 것을 시작할 수 있습니다 .apportforksetuidsetgitexec zenity

관련 정보