added trace constant for finding extension crashes
This commit is contained in:
parent
839766a065
commit
d34bfb7c43
1 changed files with 36 additions and 0 deletions
|
|
@ -23,6 +23,8 @@ function couldBeOutput(line: string) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const trace = false;
|
||||||
|
|
||||||
export class MI2 extends EventEmitter implements IBackend {
|
export class MI2 extends EventEmitter implements IBackend {
|
||||||
constructor(public application: string, public preargs: string[]) {
|
constructor(public application: string, public preargs: string[]) {
|
||||||
super();
|
super();
|
||||||
|
|
@ -218,6 +220,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout(data) {
|
stdout(data) {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "stdout: " + data);
|
||||||
if (typeof data == "string")
|
if (typeof data == "string")
|
||||||
this.buffer += data;
|
this.buffer += data;
|
||||||
else
|
else
|
||||||
|
|
@ -299,6 +303,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
this.emit("running", parsed);
|
this.emit("running", parsed);
|
||||||
else if (record.asyncClass == "stopped") {
|
else if (record.asyncClass == "stopped") {
|
||||||
let reason = parsed.record("reason");
|
let reason = parsed.record("reason");
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "stop: " + reason);
|
||||||
if (reason == "breakpoint-hit")
|
if (reason == "breakpoint-hit")
|
||||||
this.emit("breakpoint", parsed);
|
this.emit("breakpoint", parsed);
|
||||||
else if (reason == "end-stepping-range")
|
else if (reason == "end-stepping-range")
|
||||||
|
|
@ -381,6 +387,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
interrupt(): Thenable<boolean> {
|
interrupt(): Thenable<boolean> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "interrupt");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("exec-interrupt").then((info) => {
|
this.sendCommand("exec-interrupt").then((info) => {
|
||||||
resolve(info.resultRecords.resultClass == "done");
|
resolve(info.resultRecords.resultClass == "done");
|
||||||
|
|
@ -389,6 +397,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
continue(reverse: boolean = false): Thenable<boolean> {
|
continue(reverse: boolean = false): Thenable<boolean> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "continue");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("exec-continue" + (reverse ? " --reverse" : "")).then((info) => {
|
this.sendCommand("exec-continue" + (reverse ? " --reverse" : "")).then((info) => {
|
||||||
resolve(info.resultRecords.resultClass == "running");
|
resolve(info.resultRecords.resultClass == "running");
|
||||||
|
|
@ -397,6 +407,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
next(reverse: boolean = false): Thenable<boolean> {
|
next(reverse: boolean = false): Thenable<boolean> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "next");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("exec-next" + (reverse ? " --reverse" : "")).then((info) => {
|
this.sendCommand("exec-next" + (reverse ? " --reverse" : "")).then((info) => {
|
||||||
resolve(info.resultRecords.resultClass == "running");
|
resolve(info.resultRecords.resultClass == "running");
|
||||||
|
|
@ -405,6 +417,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
step(reverse: boolean = false): Thenable<boolean> {
|
step(reverse: boolean = false): Thenable<boolean> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "step");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("exec-step" + (reverse ? " --reverse" : "")).then((info) => {
|
this.sendCommand("exec-step" + (reverse ? " --reverse" : "")).then((info) => {
|
||||||
resolve(info.resultRecords.resultClass == "running");
|
resolve(info.resultRecords.resultClass == "running");
|
||||||
|
|
@ -413,6 +427,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
stepOut(reverse: boolean = false): Thenable<boolean> {
|
stepOut(reverse: boolean = false): Thenable<boolean> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "stepOut");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("exec-finish" + (reverse ? " --reverse" : "")).then((info) => {
|
this.sendCommand("exec-finish" + (reverse ? " --reverse" : "")).then((info) => {
|
||||||
resolve(info.resultRecords.resultClass == "running");
|
resolve(info.resultRecords.resultClass == "running");
|
||||||
|
|
@ -421,10 +437,14 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
changeVariable(name: string, rawValue: string): Thenable<any> {
|
changeVariable(name: string, rawValue: string): Thenable<any> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "changeVariable");
|
||||||
return this.sendCommand("gdb-set var " + name + "=" + rawValue);
|
return this.sendCommand("gdb-set var " + name + "=" + rawValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
loadBreakPoints(breakpoints: Breakpoint[]): Thenable<[boolean, Breakpoint][]> {
|
loadBreakPoints(breakpoints: Breakpoint[]): Thenable<[boolean, Breakpoint][]> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "loadBreakPoints");
|
||||||
let promisses = [];
|
let promisses = [];
|
||||||
breakpoints.forEach(breakpoint => {
|
breakpoints.forEach(breakpoint => {
|
||||||
promisses.push(this.addBreakPoint(breakpoint));
|
promisses.push(this.addBreakPoint(breakpoint));
|
||||||
|
|
@ -433,10 +453,14 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
setBreakPointCondition(bkptNum, condition): Thenable<any> {
|
setBreakPointCondition(bkptNum, condition): Thenable<any> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "setBreakPointCondition");
|
||||||
return this.sendCommand("break-condition " + bkptNum + " " + condition);
|
return this.sendCommand("break-condition " + bkptNum + " " + condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
addBreakPoint(breakpoint: Breakpoint): Thenable<[boolean, Breakpoint]> {
|
addBreakPoint(breakpoint: Breakpoint): Thenable<[boolean, Breakpoint]> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "addBreakPoint");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (this.breakpoints.has(breakpoint))
|
if (this.breakpoints.has(breakpoint))
|
||||||
return resolve(false);
|
return resolve(false);
|
||||||
|
|
@ -476,6 +500,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
removeBreakPoint(breakpoint: Breakpoint): Thenable<boolean> {
|
removeBreakPoint(breakpoint: Breakpoint): Thenable<boolean> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "removeBreakPoint");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!this.breakpoints.has(breakpoint))
|
if (!this.breakpoints.has(breakpoint))
|
||||||
return resolve(false);
|
return resolve(false);
|
||||||
|
|
@ -490,6 +516,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
clearBreakPoints(): Thenable<any> {
|
clearBreakPoints(): Thenable<any> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "clearBreakPoints");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("break-delete").then((result) => {
|
this.sendCommand("break-delete").then((result) => {
|
||||||
if (result.resultRecords.resultClass == "done") {
|
if (result.resultRecords.resultClass == "done") {
|
||||||
|
|
@ -504,6 +532,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
getStack(maxLevels: number): Thenable<Stack[]> {
|
getStack(maxLevels: number): Thenable<Stack[]> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "getStack");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let command = "stack-list-frames";
|
let command = "stack-list-frames";
|
||||||
if (maxLevels) {
|
if (maxLevels) {
|
||||||
|
|
@ -538,6 +568,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
getStackVariables(thread: number, frame: number): Thenable<Variable[]> {
|
getStackVariables(thread: number, frame: number): Thenable<Variable[]> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "getStackVariables");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("stack-list-variables --thread " + thread + " --frame " + frame + " --simple-values").then((result) => {
|
this.sendCommand("stack-list-variables --thread " + thread + " --frame " + frame + " --simple-values").then((result) => {
|
||||||
let variables = result.result("variables");
|
let variables = result.result("variables");
|
||||||
|
|
@ -559,6 +591,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
examineMemory(from: number, length: number): Thenable<any> {
|
examineMemory(from: number, length: number): Thenable<any> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "examineMemory");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("data-read-memory-bytes 0x" + from.toString(16) + " " + length).then((result) => {
|
this.sendCommand("data-read-memory-bytes 0x" + from.toString(16) + " " + length).then((result) => {
|
||||||
resolve(result.result("memory[0].contents"));
|
resolve(result.result("memory[0].contents"));
|
||||||
|
|
@ -567,6 +601,8 @@ export class MI2 extends EventEmitter implements IBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
evalExpression(name: string): Thenable<any> {
|
evalExpression(name: string): Thenable<any> {
|
||||||
|
if (trace)
|
||||||
|
this.log("stderr", "evalExpression");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sendCommand("data-evaluate-expression " + name).then((result) => {
|
this.sendCommand("data-evaluate-expression " + name).then((result) => {
|
||||||
resolve(result);
|
resolve(result);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue