Apply patch #5561. Connect debugger on error.
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 16 Nov 2006 12:47:22 +0000 (12:47 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 16 Nov 2006 12:47:22 +0000 (12:47 +0000)
src/ui/ChangeLog
src/ui/automake.mk
src/ui/debugger.c [new file with mode: 0644]
src/ui/debugger.h [new file with mode: 0644]
src/ui/terminal/ChangeLog
src/ui/terminal/main.c

index f4a3751332c7930a8579c457a91203222a13c22a..2397ee41c991c3d6e19ac6412ed1e733ea0c5425 100644 (file)
@@ -1,3 +1,7 @@
+Thu Nov 16 20:44:58 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * debugger.c debugger.h New files.
+
 Mon Jul 17 18:22:18 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
        * flexifile.c flexifile.h: New files. Implementations of casefiles.
index 5bf786205560555fd29c6cf7278c1ebcc3ab9cc6..f2d56bad2d337d64eb523444064c54c163492c7c 100644 (file)
@@ -9,5 +9,7 @@ endif
 noinst_LIBRARIES += src/ui/libuicommon.a
 
 src_ui_libuicommon_a_SOURCES = \
+       src/ui/debugger.c \
+       src/ui/debugger.h \
        src/ui/flexifile.c \
        src/ui/flexifile.h
diff --git a/src/ui/debugger.c b/src/ui/debugger.c
new file mode 100644 (file)
index 0000000..49f2341
--- /dev/null
@@ -0,0 +1,67 @@
+/* PSPP - computes sample statistics.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   Written by John Darrington <john@darrington.wattle.id.au>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
+
+#include <config.h>
+
+#include <errno.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+
+
+#include "debugger.h"
+
+/* Fork, start gdb and connect to the parent process. 
+   If that happens successfully, then this function does not return,
+   but exits with EXIT_FAILURE. Otherwise it returns.
+ */
+   
+void
+connect_debugger (void)
+{
+  char pidstr[20];
+  pid_t pid;
+
+  snprintf (pidstr, 20, "%d", getpid ());
+  pid = fork ();
+  if ( pid  == -1 ) 
+    {
+      perror ("Cannot fork");
+      return ;
+    }
+  if ( pid == 0 ) 
+    {
+      /* child */
+      execlp ("gdb", "gdb", "-p", pidstr, NULL);
+      perror ("Cannot exec debugger");
+      exit (EXIT_FAILURE);
+    }
+  else
+    {
+      int status;
+      wait (&status);
+      if ( EXIT_SUCCESS != WEXITSTATUS (status) ) 
+       return ;
+    }
+  
+  exit (EXIT_FAILURE);
+}
+
diff --git a/src/ui/debugger.h b/src/ui/debugger.h
new file mode 100644 (file)
index 0000000..8476ff0
--- /dev/null
@@ -0,0 +1,29 @@
+/* PSPP - computes sample statistics.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   Written by John Darrington <john@darrington.wattle.id.au>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
+
+#ifndef DEBUGGER_H
+#define DEBUGGER_H
+
+
+/* Fork, start gdb and connect to the parent process. 
+   Exit with EXIT_FAILURE.
+ */
+void connect_debugger (void) ;
+
+#endif
index 4bc7b3619f6153a22de3d4713638194f90ced9b8..98ce96c7c51954c338ee3c8639bb45d28bdbc0a7 100644 (file)
@@ -1,3 +1,7 @@
+Thu Nov 16 20:46:35 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * main.c: Connect debugger on errors.
+
 Tue Nov  7 20:54:32 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
        * command-line.c msg-ui.c msg-ui.h main.c: Added an -e
index a99f580d8e613ba987d98f803a2bd3c7530b804d..5e9a605bc4aaef361f8c28d2940c4d4770eb7ede 100644 (file)
@@ -22,6 +22,7 @@
 #include <signal.h>
 #include <stdio.h>
 
+#include <ui/debugger.h>
 #include "command-line.h"
 #include "msg-ui.h"
 #include "progname.h"
@@ -108,7 +109,7 @@ main (int argc, char **argv)
         {
           int result = cmd_parse (the_lexer, the_dataset, 
                                  proc_has_source (the_dataset)
-                                  ? CMD_STATE_DATA : CMD_STATE_INITIAL);
+                                 ? CMD_STATE_DATA : CMD_STATE_INITIAL);
           if (result == CMD_EOF || result == CMD_FINISH)
             break;
           if (result == CMD_CASCADING_FAILURE && !getl_is_interactive ())
@@ -153,6 +154,9 @@ fpu_init (void)
 void 
 bug_handler(int sig)
 {
+#if DEBUGGING
+  connect_debugger ();
+#endif
   switch (sig) 
     {
     case SIGABRT: