|
1 | 1 | import { DebugSession, InitializedEvent, TerminatedEvent, StoppedEvent, OutputEvent, Thread, StackFrame, Scope, Source, Handles } from 'vscode-debugadapter'; |
2 | 2 | import { DebugProtocol } from 'vscode-debugprotocol'; |
3 | | -import { Breakpoint, IBackend, Variable, VariableObject, ValuesFormattingMode } from './backend/backend'; |
| 3 | +import { Breakpoint, IBackend, Variable, VariableObject, ValuesFormattingMode, MIError } from './backend/backend'; |
4 | 4 | import { MINode } from './backend/mi_parse'; |
5 | 5 | import { expandValue, isExpandable } from './backend/gdb_expansion'; |
6 | 6 | import { MI2 } from './backend/mi2/mi2'; |
@@ -335,24 +335,30 @@ export class MI2DebugSession extends DebugSession { |
335 | 335 | for (const variable of stack) { |
336 | 336 | if (this.useVarObjects) { |
337 | 337 | try { |
| 338 | + let varObjName = `var_${variable.name}`; |
338 | 339 | let varObj: VariableObject; |
339 | 340 | try { |
340 | | - const changes = await this.miDebugger.varUpdate(variable.name); |
| 341 | + const changes = await this.miDebugger.varUpdate(varObjName); |
341 | 342 | const changelist = changes.result("changelist"); |
342 | 343 | changelist.forEach((change) => { |
343 | 344 | const name = MINode.valueOf(change, "name"); |
344 | | - const vId = this.variableHandlesReverse[variable.name]; |
| 345 | + const vId = this.variableHandlesReverse[varObjName]; |
345 | 346 | const v = this.variableHandles.get(vId) as any; |
346 | 347 | v.applyChanges(change); |
347 | 348 | }); |
348 | | - const varId = this.variableHandlesReverse[variable.name]; |
| 349 | + const varId = this.variableHandlesReverse[varObjName]; |
349 | 350 | varObj = this.variableHandles.get(varId) as any; |
350 | 351 | } |
351 | 352 | catch (err) { |
352 | | - varObj = await this.miDebugger.varCreate(variable.name, variable.name); |
353 | | - const varId = findOrCreateVariable(varObj); |
354 | | - varObj.exp = variable.name; |
355 | | - varObj.id = varId; |
| 353 | + if (err instanceof MIError && err.message == "Variable object not found") { |
| 354 | + varObj = await this.miDebugger.varCreate(variable.name, varObjName); |
| 355 | + const varId = findOrCreateVariable(varObj); |
| 356 | + varObj.exp = variable.name; |
| 357 | + varObj.id = varId; |
| 358 | + } |
| 359 | + else { |
| 360 | + throw err; |
| 361 | + } |
356 | 362 | } |
357 | 363 | variables.push(varObj.toProtocolVariable()); |
358 | 364 | } |
|
0 commit comments