
この質問は 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