From 5ab7fdbf0845c40418272bafa565295511055d3b Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Wed, 23 Aug 2017 10:35:56 +0200 Subject: Allow to set used debugging port via commandline Change-Id: I6f99e2bf77aed2503119959d46c48e359940600a Reviewed-by: hjk Reviewed-by: Mikko Gronoff Reviewed-by: Samuli Piippo --- main.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/main.cpp b/main.cpp index ef1626f..421aae1 100644 --- a/main.cpp +++ b/main.cpp @@ -39,7 +39,7 @@ #include #define PID_FILE "/data/user/.appcontroller" -#define FEATURES "restart perf eglresize qmldebugservices" +#define FEATURES "restart perf eglresize qmldebugservices explicitdebugports" #define B2QT_PREFIX "/usr/bin/b2qt" @@ -49,14 +49,17 @@ static const char socketPath[] = "#Boot2Qt_appcontroller"; static void usage() { - printf("appcontroller [--debug-gdb] [--debug-qml] [--qml-debug-services ]" + printf("appcontroller [--debug-gdb] [--debug-gdb-port ]" + " [--debug-qml] [--debug-qml-port ] [--qml-debug-services ]" " [--profile-perf ] [--port-range ] [--stop] [--launch] [--show-platfrom]" " [--make-default] [--remove-default] [--print-debug] [--version] [--detach]" " [executable] [arguments]\n" "\n" "--port-range Port range to use for debugging connections\n" "--debug-gdb Start GDB debugging\n" + "--debug-gdb-port Port to be used for GDB debugging\n" "--debug-qml Start QML debugging or profiling\n" + "--debug-qml-port Port to be used for QML debugging\n" "--qml-debug-services Specify services to use for QML debugging/profiling\n" "--profile-perf Start perf profiling\n" "--stop Stop already running application\n" @@ -329,6 +332,7 @@ int main(int argc, char **argv) QStringList defaultArgs; quint16 gdbDebugPort = 0; + quint16 qmlDebugPort = 0; bool useGDB = false; bool useQML = false; QString qmlDebugServices; @@ -363,8 +367,28 @@ int main(int argc, char **argv) useGDB = true; setpgid(0,0); // must be called before setsid() setsid(); + } else if (arg == "--debug-gdb-port") { + if (args.isEmpty()) { + fprintf(stderr, "--debug-gdb-port requires a port number\n"); + return 1; + } + gdbDebugPort = args.takeFirst().toUInt(); + if (gdbDebugPort < 1) { + fprintf(stderr, "--debug-gdb-port has invalid port number\n"); + return 1; + } } else if (arg == "--debug-qml") { useQML = true; + } else if (arg == "--debug-qml-port") { + if (args.isEmpty()) { + fprintf(stderr, "--debug-qml-port requires a port number\n"); + return 1; + } + qmlDebugPort = args.takeFirst().toUInt(); + if (qmlDebugPort < 1) { + fprintf(stderr, "--debug-qml-port has invalid port number\n"); + return 1; + } } else if (arg == "--qml-debug-services") { if (args.isEmpty()) { fprintf(stderr, "--qml-debug-services requires a list of comma-separated service " @@ -429,8 +453,13 @@ int main(int argc, char **argv) return 1; } - if ((useGDB || useQML) && !range.hasMore()) { - fprintf(stderr, "--port-range is mandatory\n"); + if (useGDB && !(gdbDebugPort || range.hasMore())) { + fprintf(stderr, "--debug-gdb requires --port-range or --debug-gdb-port\n"); + return 1; + } + + if (useQML && !(qmlDebugPort || range.hasMore())) { + fprintf(stderr, "--debug-qml requires --port-range or --debug-qml-port\n"); return 1; } @@ -439,7 +468,10 @@ int main(int argc, char **argv) return 1; } - if (useGDB) { + if (gdbDebugPort && !useGDB) + gdbDebugPort = 0; + + if (useGDB && !gdbDebugPort) { int port = findFirstFreePort(range); if (port < 0) { fprintf(stderr, "Could not find an unused port in range\n"); @@ -448,15 +480,18 @@ int main(int argc, char **argv) gdbDebugPort = port; } if (useQML) { - int port = findFirstFreePort(range); - if (port < 0) { - fprintf(stderr, "Could not find an unused port in range\n"); - return 1; + if (!qmlDebugPort) { + int port = findFirstFreePort(range); + if (port < 0) { + fprintf(stderr, "Could not find an unused port in range\n"); + return 1; + } + qmlDebugPort = port; } - defaultArgs.push_front("-qmljsdebugger=port:" + QString::number(port) + ",block" + + defaultArgs.push_front("-qmljsdebugger=port:" + QString::number(qmlDebugPort) + ",block" + (qmlDebugServices.isEmpty() ? "" : (",services:" + qmlDebugServices))); - printf("QML Debugger: Going to wait for connection on port %d...\n", port); + printf("QML Debugger: Going to wait for connection on port %d...\n", qmlDebugPort); } defaultArgs.push_front(args.takeFirst()); -- cgit v1.2.3