diff --git a/src/backend/mi2/mi2.ts b/src/backend/mi2/mi2.ts index 0bcc6bd..f5f28f1 100644 --- a/src/backend/mi2/mi2.ts +++ b/src/backend/mi2/mi2.ts @@ -690,6 +690,12 @@ export class MI2 extends EventEmitter implements IBackend { return this.sendCommand(`var-update --all-values ${name}`) } + async varAssign(name: string, rawValue: string): Promise { + if (trace) + this.log("stderr", "varAssign"); + return this.sendCommand(`var-assign ${name} ${rawValue}`); + } + logNoNewLine(type: string, msg: string) { this.emit("msg", type, msg); } diff --git a/src/mibase.ts b/src/mibase.ts index 16785e2..92cacca 100644 --- a/src/mibase.ts +++ b/src/mibase.ts @@ -130,15 +130,23 @@ export class MI2DebugSession extends DebugSession { this.sendResponse(response); } - protected setVariableRequest(response: DebugProtocol.SetVariableResponse, args: DebugProtocol.SetVariableArguments): void { - this.miDebugger.changeVariable(args.name, args.value).then(() => { + protected async setVariableRequest(response: DebugProtocol.SetVariableResponse, args: DebugProtocol.SetVariableArguments): Promise { + try { + let name = args.name; + if (args.variablesReference >= VAR_HANDLES_START) { + const parent = this.variableHandles.get(args.variablesReference) as VariableObject; + name = `${parent.name}.${name}`; + } + + let res = await this.miDebugger.varAssign(name, args.value); response.body = { - value: args.value + value: res.result("value") }; this.sendResponse(response); - }, err => { + } + catch (err) { this.sendErrorResponse(response, 11, `Could not continue: ${err}`); - }); + }; } protected setFunctionBreakPointsRequest(response: DebugProtocol.SetFunctionBreakpointsResponse, args: DebugProtocol.SetFunctionBreakpointsArguments): void {