From 7a24c2f5529573d5a04c50258f24bdb56ddbb7ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Louis-Francis=20Ratt=C3=A9-Boulianne?= <lfrb@collabora.com>
Date: Fri, 16 Dec 2016 03:07:10 -0500
Subject: [PATCH] Add --no-interactive option to the debug command
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

When we only want the GDB server running

Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>
Reviewed-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Differential Revision: https://phabricator.apertis.org/D5328
---
 doc/man/ade-debug.1 |  6 ++++++
 tools/ade           | 20 ++++++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/doc/man/ade-debug.1 b/doc/man/ade-debug.1
index 177b622..3c77e41 100644
--- a/doc/man/ade-debug.1
+++ b/doc/man/ade-debug.1
@@ -32,6 +32,12 @@ point is used when found\&.
 .sp
 .RE
 .PP
+\fI\-\-no-interactive\fR
+.RS 4
+Only start the GDB server without entering the GDB interactive mode\&.
+.sp
+.RE
+.PP
 \fI\-\-device\fR
 .RS 4
 Use device as target (e.g. user@apertis)\&.
diff --git a/tools/ade b/tools/ade
index 47f4428..bfc4865 100755
--- a/tools/ade
+++ b/tools/ade
@@ -218,6 +218,7 @@ class DebuggerServer:
         self.app = app
         self.args = args
         self.port = DEFAULT_GDBSERVER_PORT
+        self.host = self.target.host
         self._thread = None
 
     def __enter__(self):
@@ -278,6 +279,7 @@ class Debugger:
 class Simulator:
 
     def __init__(self):
+        self.host = 'localhost'
         try:
             with open('/etc/image_version') as f:
                 self.version = SysrootVersion.from_string(f.read())
@@ -527,6 +529,7 @@ class Sysroot:
 class SDK:
 
     def __init__(self):
+        self.host = 'localhost'
         try:
             with open('/etc/image_version') as f:
                 self.version = SysrootVersion.from_string(f.read())
@@ -1056,6 +1059,7 @@ class Ade:
         self.force = False
         self.debug = False
         self.verbose = False
+        self.no_interactive = False
 
     def get_sdk(self):
         try:
@@ -1453,8 +1457,19 @@ class Ade:
             self.app = project.get_main_executable()
 
         with DebuggerServer(target, self.app, *self.args) as server:
-            gdb = Debugger(self.unpack_sysroot(target), project)
-            gdb.connect(server)
+            if self.no_interactive:
+                self.info("* Gdb Server host is {0}".format(server.host))
+                self.info("* Gdb Server port is {0}".format(server.port))
+                self.info("* Gdb Server is ready")
+                if self.format == 'parseable':
+                    print("GdbServerHost:{0}".format(server.host))
+                    print("GdbServerPort:{0}".format(server.port))
+                    print("GdbServerReady:true")
+                while True:
+                    pass
+            else:
+                gdb = Debugger(self.unpack_sysroot(target), project)
+                gdb.connect(server)
 
     def info(self, message):
         if self.format == 'friendly':
@@ -1575,6 +1590,7 @@ if __name__ == '__main__':
     # Debug parser
     debug_parser = subparsers.add_parser('debug', help="Debug application")
     debug_parser.add_argument('--app', help="Remote path to application to debug")
+    debug_parser.add_argument('--no-interactive', help="Don't start GDB interactive mode", action='store_true')
     group = debug_parser.add_mutually_exclusive_group()
     group.add_argument('--device', help="Use device as target (e.g. user@apertis)")
     debug_parser.add_argument('args', help="Arguments to pass to application", nargs=argparse.REMAINDER)
-- 
GitLab