39
39
#include < sys/wait.h>
40
40
41
41
#define PID_FILE " /data/user/.appcontroller"
42
- #define FEATURES " restart perf eglresize qmldebugservices"
42
+ #define FEATURES " restart perf eglresize qmldebugservices explicitdebugports "
43
43
44
44
#define B2QT_PREFIX " /usr/bin/b2qt"
45
45
@@ -49,14 +49,17 @@ static const char socketPath[] = "#Boot2Qt_appcontroller";
49
49
50
50
static void usage ()
51
51
{
52
- printf (" appcontroller [--debug-gdb] [--debug-qml] [--qml-debug-services <services>]"
52
+ printf (" appcontroller [--debug-gdb] [--debug-gdb-port <port>]"
53
+ " [--debug-qml] [--debug-qml-port <port>] [--qml-debug-services <services>]"
53
54
" [--profile-perf <params>] [--port-range <range>] [--stop] [--launch] [--show-platfrom]"
54
55
" [--make-default] [--remove-default] [--print-debug] [--version] [--detach]"
55
56
" [executable] [arguments]\n "
56
57
" \n "
57
58
" --port-range <range> Port range to use for debugging connections\n "
58
59
" --debug-gdb Start GDB debugging\n "
60
+ " --debug-gdb-port <port> Port to be used for GDB debugging\n "
59
61
" --debug-qml Start QML debugging or profiling\n "
62
+ " --debug-qml-port <port> Port to be used for QML debugging\n "
60
63
" --qml-debug-services <services> Specify services to use for QML debugging/profiling\n "
61
64
" --profile-perf <params> Start perf profiling\n "
62
65
" --stop Stop already running application\n "
@@ -329,6 +332,7 @@ int main(int argc, char **argv)
329
332
330
333
QStringList defaultArgs;
331
334
quint16 gdbDebugPort = 0 ;
335
+ quint16 qmlDebugPort = 0 ;
332
336
bool useGDB = false ;
333
337
bool useQML = false ;
334
338
QString qmlDebugServices;
@@ -363,8 +367,28 @@ int main(int argc, char **argv)
363
367
useGDB = true ;
364
368
setpgid (0 ,0 ); // must be called before setsid()
365
369
setsid ();
370
+ } else if (arg == " --debug-gdb-port" ) {
371
+ if (args.isEmpty ()) {
372
+ fprintf (stderr, " --debug-gdb-port requires a port number\n " );
373
+ return 1 ;
374
+ }
375
+ gdbDebugPort = args.takeFirst ().toUInt ();
376
+ if (gdbDebugPort < 1 ) {
377
+ fprintf (stderr, " --debug-gdb-port has invalid port number\n " );
378
+ return 1 ;
379
+ }
366
380
} else if (arg == " --debug-qml" ) {
367
381
useQML = true ;
382
+ } else if (arg == " --debug-qml-port" ) {
383
+ if (args.isEmpty ()) {
384
+ fprintf (stderr, " --debug-qml-port requires a port number\n " );
385
+ return 1 ;
386
+ }
387
+ qmlDebugPort = args.takeFirst ().toUInt ();
388
+ if (qmlDebugPort < 1 ) {
389
+ fprintf (stderr, " --debug-qml-port has invalid port number\n " );
390
+ return 1 ;
391
+ }
368
392
} else if (arg == " --qml-debug-services" ) {
369
393
if (args.isEmpty ()) {
370
394
fprintf (stderr, " --qml-debug-services requires a list of comma-separated service "
@@ -429,8 +453,13 @@ int main(int argc, char **argv)
429
453
return 1 ;
430
454
}
431
455
432
- if ((useGDB || useQML) && !range.hasMore ()) {
433
- fprintf (stderr, " --port-range is mandatory\n " );
456
+ if (useGDB && !(gdbDebugPort || range.hasMore ())) {
457
+ fprintf (stderr, " --debug-gdb requires --port-range or --debug-gdb-port\n " );
458
+ return 1 ;
459
+ }
460
+
461
+ if (useQML && !(qmlDebugPort || range.hasMore ())) {
462
+ fprintf (stderr, " --debug-qml requires --port-range or --debug-qml-port\n " );
434
463
return 1 ;
435
464
}
436
465
@@ -439,7 +468,10 @@ int main(int argc, char **argv)
439
468
return 1 ;
440
469
}
441
470
442
- if (useGDB) {
471
+ if (gdbDebugPort && !useGDB)
472
+ gdbDebugPort = 0 ;
473
+
474
+ if (useGDB && !gdbDebugPort) {
443
475
int port = findFirstFreePort (range);
444
476
if (port < 0 ) {
445
477
fprintf (stderr, " Could not find an unused port in range\n " );
@@ -448,15 +480,18 @@ int main(int argc, char **argv)
448
480
gdbDebugPort = port;
449
481
}
450
482
if (useQML) {
451
- int port = findFirstFreePort (range);
452
- if (port < 0 ) {
453
- fprintf (stderr, " Could not find an unused port in range\n " );
454
- return 1 ;
483
+ if (!qmlDebugPort) {
484
+ int port = findFirstFreePort (range);
485
+ if (port < 0 ) {
486
+ fprintf (stderr, " Could not find an unused port in range\n " );
487
+ return 1 ;
488
+ }
489
+ qmlDebugPort = port;
455
490
}
456
- defaultArgs.push_front (" -qmljsdebugger=port:" + QString::number (port ) + " ,block" +
491
+ defaultArgs.push_front (" -qmljsdebugger=port:" + QString::number (qmlDebugPort ) + " ,block" +
457
492
(qmlDebugServices.isEmpty () ?
458
493
" " : (" ,services:" + qmlDebugServices)));
459
- printf (" QML Debugger: Going to wait for connection on port %d...\n " , port );
494
+ printf (" QML Debugger: Going to wait for connection on port %d...\n " , qmlDebugPort );
460
495
}
461
496
462
497
defaultArgs.push_front (args.takeFirst ());
0 commit comments