diff --git a/src/backend/mi2/mi2.ts b/src/backend/mi2/mi2.ts index 3d9a4459..8963b7e9 100644 --- a/src/backend/mi2/mi2.ts +++ b/src/backend/mi2/mi2.ts @@ -675,6 +675,9 @@ export class MI2 extends EventEmitter implements IBackend { const result = await this.sendCommand(command); const threads = result.result("threads"); const ret: Thread[] = []; + if (!Array.isArray(threads)) { // workaround for lldb-mi bug: `'^done,threads="[]"'` + return ret; + } return threads.map(element => { const ret: Thread = { id: parseInt(MINode.valueOf(element, "id")), diff --git a/src/mibase.ts b/src/mibase.ts index 8ea52c9e..e6cb2054 100644 --- a/src/mibase.ts +++ b/src/mibase.ts @@ -482,7 +482,7 @@ export class MI2DebugSession extends DebugSession { const varId = this.variableHandlesReverse[varObjName]; varObj = this.variableHandles.get(varId) as any; } catch (err) { - if (err instanceof MIError && err.message == "Variable object not found") { + if (err instanceof MIError && (err.message == "Variable object not found" || err.message.endsWith("does not exist"))) { varObj = await this.miDebugger.varCreate(id.threadId, id.level, variable.name, varObjName); const varId = findOrCreateVariable(varObj); varObj.exp = variable.name;