File tree Expand file tree Collapse file tree 2 files changed +28
-1
lines changed Expand file tree Collapse file tree 2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -48,8 +48,10 @@ export abstract class AbstractServer extends EventEmitter {
48
48
49
49
try {
50
50
this . timer = setTimeout ( ( ) => this . onSpawnError ( new Error ( 'Timeout waiting for gdb server to start' ) ) , TIMEOUT ) ;
51
+
51
52
const command = args . gdbServer || 'gdb-server' ;
52
- this . process = spawn ( command , args . gdbServerArguments , {
53
+ const serverArguments = await this . resolveServerArguments ( args . gdbServerArguments ) ;
54
+ this . process = spawn ( command , serverArguments , {
53
55
cwd : dirname ( command ) ,
54
56
} ) ;
55
57
@@ -78,6 +80,10 @@ export abstract class AbstractServer extends EventEmitter {
78
80
}
79
81
}
80
82
83
+ protected async resolveServerArguments ( serverArguments ?: string [ ] ) : Promise < string [ ] > {
84
+ return serverArguments || [ ] ;
85
+ }
86
+
81
87
protected onExit ( code : number , signal : string ) {
82
88
this . emit ( 'exit' , code , signal ) ;
83
89
Original file line number Diff line number Diff line change 24
24
*/
25
25
26
26
import { AbstractServer } from './abstract-server' ;
27
+ import { PortScanner } from './port-scanner' ;
27
28
28
29
const LAUNCH_REGEX = / G D B s e r v e r s t a r t e d / ;
29
30
const ERROR_REGEX = / : E R R O R : g d b s e r v e r : / ;
30
31
const PERCENT_MULTIPLIER = 100 / 40 ; // pyOCD outputs 40 markers for progress
31
32
32
33
export class PyocdServer extends AbstractServer {
34
+
35
+ protected portScanner = new PortScanner ( ) ;
33
36
protected progress = 0 ;
34
37
38
+ protected async resolveServerArguments ( serverArguments ?: string [ ] ) : Promise < string [ ] > {
39
+ if ( ! serverArguments ) {
40
+ serverArguments = [ ] ;
41
+ }
42
+
43
+ const telnetPort = await this . portScanner . findFreePort ( 4444 ) ;
44
+
45
+ if ( ! telnetPort ) {
46
+ return serverArguments ;
47
+ }
48
+
49
+ return [
50
+ ...serverArguments ,
51
+ '--telnet-port' ,
52
+ telnetPort . toString ( )
53
+ ] ;
54
+ }
55
+
35
56
protected onStdout ( chunk : string | Buffer ) {
36
57
super . onStdout ( chunk ) ;
37
58
const buffer = typeof chunk === 'string' ? chunk : chunk . toString ( 'utf8' ) ;
You can’t perform that action at this time.
0 commit comments