From cb9e36d6dba5bea3f90482b789be4bc0ffba6b85 Mon Sep 17 00:00:00 2001 From: WebFreak001 Date: Tue, 23 Feb 2016 15:33:03 +0100 Subject: [PATCH] Added support for program arguments (fix #27) --- package.json | 4 ++++ src/backend/backend.ts | 4 ++-- src/backend/mi2/mi2.ts | 18 ++++++++++++------ src/gdb.ts | 5 +++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index bb82f8b..2944f44 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,10 @@ "type": "string", "description": "Path of executable" }, + "arguments": { + "type": "string", + "description": "Arguments to append after the executable. You can also use pipes." + }, "cwd": { "type": "string", "description": "Path of project" diff --git a/src/backend/backend.ts b/src/backend/backend.ts index d4b2e7d..c75dde0 100644 --- a/src/backend/backend.ts +++ b/src/backend/backend.ts @@ -28,8 +28,8 @@ export interface SSHArguments { } export interface IBackend { - load(cwd: string, target: string): Thenable; - ssh(args: SSHArguments, cwd: string, target: string): Thenable; + load(cwd: string, target: string, procArgs: string): Thenable; + ssh(args: SSHArguments, cwd: string, target: string, procArgs: string): Thenable; attach(cwd: string, executable: string, target: string): Thenable; connect(cwd: string, executable: string, target: string): Thenable; start(): Thenable; diff --git a/src/backend/mi2/mi2.ts b/src/backend/mi2/mi2.ts index dc112ef..33aa523 100644 --- a/src/backend/mi2/mi2.ts +++ b/src/backend/mi2/mi2.ts @@ -26,7 +26,7 @@ export class MI2 extends EventEmitter implements IBackend { super(); } - load(cwd: string, target: string): Thenable { + load(cwd: string, target: string, procArgs: string): Thenable { if (!nativePath.isAbsolute(target)) target = nativePath.join(cwd, target); return new Promise((resolve, reject) => { @@ -35,17 +35,20 @@ export class MI2 extends EventEmitter implements IBackend { this.process.stdout.on("data", this.stdout.bind(this)); this.process.stderr.on("data", this.stdout.bind(this)); this.process.on("exit", (() => { this.emit("quit"); }).bind(this)); - Promise.all([ + let promises = [ this.sendCommand("gdb-set target-async on"), this.sendCommand("environment-directory \"" + escape(cwd) + "\"") - ]).then(() => { + ]; + if (procArgs && procArgs.length) + promises.push(this.sendCommand("exec-arguments " + procArgs)); + Promise.all(promises).then(() => { this.emit("debug-ready") resolve(); }, reject); }); } - ssh(args: SSHArguments, cwd: string, target: string): Thenable { + ssh(args: SSHArguments, cwd: string, target: string, procArgs: string): Thenable { return new Promise((resolve, reject) => { this.isSSH = true; this.sshReady = false; @@ -111,12 +114,15 @@ export class MI2 extends EventEmitter implements IBackend { this.emit("quit"); this.sshConn.end(); }).bind(this)); - Promise.all([ + let promises = [ this.sendCommand("gdb-set target-async on"), this.sendCommand("environment-directory \"" + escape(cwd) + "\""), this.sendCommand("environment-cd \"" + escape(cwd) + "\""), this.sendCommand("file-exec-and-symbols \"" + escape(target) + "\"") - ]).then(() => { + ]; + if (procArgs && procArgs.length) + promises.push(this.sendCommand("exec-arguments " + procArgs)); + Promise.all(promises).then(() => { this.emit("debug-ready") resolve(); }, reject); diff --git a/src/gdb.ts b/src/gdb.ts index ba5d5c3..5fdc827 100644 --- a/src/gdb.ts +++ b/src/gdb.ts @@ -13,6 +13,7 @@ let relative = posix.relative; export interface LaunchRequestArguments { cwd: string; target: string; + arguments: string; autorun: string[]; ssh: SSHArguments; printCalls: boolean; @@ -109,7 +110,7 @@ class MI2DebugSession extends DebugSession { this.isSSH = true; this.trimCWD = args.cwd.replace(/\\/g, "/"); this.switchCWD = args.ssh.cwd; - this.gdbDebugger.ssh(args.ssh, args.ssh.cwd, args.target).then(() => { + this.gdbDebugger.ssh(args.ssh, args.ssh.cwd, args.target, args.arguments).then(() => { if (args.autorun) args.autorun.forEach(command => { this.gdbDebugger.sendUserInput(command); @@ -120,7 +121,7 @@ class MI2DebugSession extends DebugSession { }); } else { - this.gdbDebugger.load(args.cwd, args.target).then(() => { + this.gdbDebugger.load(args.cwd, args.target, args.arguments).then(() => { if (args.autorun) args.autorun.forEach(command => { this.gdbDebugger.sendUserInput(command);