diff --git a/bin/test_pike.pike b/bin/test_pike.pike
index 31b09c37c1bb884668cbd1f8433571ce7d889c5c..f4456edf48d708faf92446b1d2373f9cea884f0c 100755
--- a/bin/test_pike.pike
+++ b/bin/test_pike.pike
@@ -1,6 +1,6 @@
 #!/usr/local/bin/pike
 
-/* $Id: test_pike.pike,v 1.14 1998/10/14 05:47:06 hubbe Exp $ */
+/* $Id: test_pike.pike,v 1.15 1999/01/21 09:11:42 hubbe Exp $ */
 
 #include <simulate.h>
 
@@ -16,6 +16,10 @@ int foo(string opt)
 
 mapping(string:int) cond_cache=([]);
 
+#if constant(thread_create)
+#define HAVE_DEBUG
+#endif
+
 int main(int argc, string *argv)
 {
   int e, verbose, successes, errors, t, check;
@@ -24,6 +28,18 @@ int main(int argc, string *argv)
   int start, fail, mem;
   int loop=1;
   int end=0x7fffffff;
+  string extra_info="";
+
+
+#if constant(signal) && constant(signum)
+  if(signum("SIGQUIT")>=0)
+  {
+    signal(signum("SIGQUIT"),lambda()
+	   {
+	     master()->handle_error( ({"\nSIGQUIT recived, printing backtrace and continuing.\n",backtrace() }) );
+	   });
+  }
+#endif
 
   string *args=backtrace()[0][3];
   args=args[..sizeof(args)-1-argc];
@@ -39,6 +55,9 @@ int main(int argc, string *argv)
     ({"trace",Getopt.MAY_HAVE_ARG,({"-t","--trace"})}),
     ({"check",Getopt.MAY_HAVE_ARG,({"-c","--check"})}),
     ({"mem",Getopt.MAY_HAVE_ARG,({"-m","--mem","--memory"})}),
+#ifdef HAVE_DEBUG
+    ({"debug",Getopt.MAY_HAVE_ARG,({"-d","--debug"})}),
+#endif
     )),array opt)
     {
       switch(opt[0])
@@ -55,6 +74,29 @@ int main(int argc, string *argv)
 	case "trace": t+=foo(opt[1]); break;
 	case "check": check+=foo(opt[1]); break;
 	case "mem": mem+=foo(opt[1]); break;
+
+#ifdef HAVE_DEBUG
+	case "debug":
+	{
+	  object p=Stdio.Port();
+	  p->bind(0);
+	  werror("Debug port is: %s\n",p->query_address());
+	  sscanf(p->query_address(),"%*s %d",int portno);
+	  extra_info+=sprintf(" dport:%d",portno);
+	  thread_create(lambda(object p){
+	    while(p)
+	    {
+	      if(object o=p->accept())
+	      {
+		object q=Stdio.FILE();
+		q->assign(o);
+		destruct(o);
+		Tools.Hilfe.GenericHilfe(q,q);
+	      }
+	    }
+	  },p);
+	}
+#endif
       }
     }
 
@@ -121,7 +163,7 @@ int main(int argc, string *argv)
 	
 	if(verbose)
 	{
-	  werror("Doing test %d (%d total)\n",e+1,successes+errors+1);
+	  werror("Doing test %d (%d total)%s\n",e+1,successes+errors+1,extra_info);
 	  if(verbose>1)
 	    werror(test+"\n");
 	}