diff --git a/test/lib/server.py b/test/lib/server.py
index 20be099eb85ac228423d67a608e09cb501057f00..0dff9c95598744239782f229d345d6ddf5fbfc70 100644
--- a/test/lib/server.py
+++ b/test/lib/server.py
@@ -1,20 +1,19 @@
 import os
-import stat
-import shutil
-import subprocess
-import pexpect
-import socket
+import re
 import sys
-import signal
+import glob
+import stat
 import time
+import shlex
 import daemon
-import glob
+import shutil
+import signal
+import socket
+import subprocess
 import ConfigParser
-import re
 
 def check_port(port):
     """Check if the port we're connecting to is available"""
-
     try:
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         sock.connect(("localhost", port))
@@ -22,18 +21,9 @@ def check_port(port):
         return
     raise RuntimeError("The server is already running on port {0}".format(port))
 
-def prepare_gdb(args):
+def prepare_gdb(binary, args):
     """Prepare server startup arguments to run under gdb."""
-
-    if "TERM" in os.environ:
-        term = os.environ["TERM"]
-    else:
-        term = "xterm"
-
-    if term not in ["xterm", "rxvt", "urxvt", "gnome-terminal", "konsole"]:
-        raise RuntimeError("--gdb: unsupported terminal {0}".format(term))
-
-    args = [ term, "-e", "gdb", "-ex", "break main", "-ex", "run" ] + args
+    args = shlex.split('screen -dmS tnt-gdb gdb %s -ex \'b main\' -ex run' % binary) + args 
     return args
 
 def prepare_valgrind(args, valgrind_log, valgrind_sup):
@@ -169,7 +159,7 @@ class Server(object):
             os.execvp(args[0], args)
 
     def prepare_args(self):
-        return [self.binary]
+        return []
 
     def start(self, start_and_exit=None, gdb=None, valgrind=None, silent=True):
         if start_and_exit != None: self.start_and_exit = start_and_exit
@@ -191,7 +181,7 @@ class Server(object):
         args = self.prepare_args()
 
         if self.gdb:
-            args = prepare_gdb(args)
+            args = prepare_gdb(self.binary, args)
         elif self.valgrind:
             args = prepare_valgrind(args, self.valgrind_log,
                                     os.path.abspath(os.path.join(self.vardir,
@@ -200,8 +190,8 @@ class Server(object):
         if self.start_and_exit:
             self._start_and_exit(args)
             return
-
-        self.process = pexpect.spawn(args[0], args[1:], cwd = self.vardir)
+        print args
+        self.process = subprocess.Popen(args, cwd = self.vardir)
 
         # wait until the server is connected
         self.wait_until_started()
@@ -231,10 +221,14 @@ class Server(object):
             os.kill(pid, signal.SIGTERM)
         #self.process.kill(signal.SIGTERM)
         if self.gdb or self.valgrind:
-            self.process.expect(pexpect.EOF, timeout = 1 << 30)
+            time = 0
+            while time < (1<<30) :
+                if self.process.poll() != None:
+                    break
+                time += 1
+                sleep(1)
         else:
-            self.process.expect(pexpect.EOF)
-        self.process.close()
+            self.process.wait()
 
         self.wait_until_stopped()
         # clean-up processs flags
diff --git a/test/lib/tarantool_server.py b/test/lib/tarantool_server.py
index 5ae0eb9f10dce8c85e29b92a932ae85352aed928..4312cce9da9de2dc556fe9ba15ef26b82c64c63f 100644
--- a/test/lib/tarantool_server.py
+++ b/test/lib/tarantool_server.py
@@ -176,5 +176,5 @@ class TarantoolServer(Server):
                 args.append("--background")
             else:
                 raise RuntimeError("'--gdb' and '--start-and-exit' can't be defined together")
-            self.server = pexpect.spawn(args[0], args[1:], cwd = self.vardir)
+            self.server = subprocess.Popen(args, cwd = self.vardir)
             self.server.wait()
diff --git a/test/test-run.py b/test/test-run.py
index 392ac2273d8834eba8228132a74e26f8c6f0ee8f..4be93e95a0581d6c04306fbe52642aa4c944c71a 100755
--- a/test/test-run.py
+++ b/test/test-run.py
@@ -90,9 +90,9 @@ class Options:
                 dest = "gdb",
                 action = "store_true",
                 default = False,
-                help = """Start the server under 'gdb' debugger.
-                See also --start-and-exit. This option is mutually exclusive with
-                --valgrind. Default: false.""")
+                help = """Start the server under 'gdb' debugger in detached
+                Screen. See also --start-and-exit. This option is mutually 
+                exclusive with --valgrind. Default: false.""")
 
         parser.add_argument(
                 "--valgrind",