added trace constant for finding extension crashes

This commit is contained in:
WebFreak001 2016-10-23 17:26:47 +02:00
commit d34bfb7c43

View file

@ -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);