提交 3f0381cd 编写于 作者: I isidor

debug: surface function breakpoints

上级 45e34429
......@@ -86,7 +86,6 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
namesToFind.push(hoveringOver);
namesToFind[0] = namesToFind[0].substring(namesToFind[0].lastIndexOf(' ') + 1);
this.getExpression(namesToFind).done(expression => {
if (!expression || !expression.available) {
this.hide();
......
......@@ -742,8 +742,8 @@ export class BreakpointsActionProvider implements renderer.IActionProvider {
actions.push(this.instantiationService.createInstance(debugactions.DisableAllBreakpointsAction, debugactions.DisableAllBreakpointsAction.ID, debugactions.DisableAllBreakpointsAction.LABEL));
actions.push(new actionbar.Separator());
// actions.push(this.instantiationService.createInstance(debugactions.AddFunctionBreakpointAction, debugactions.AddFunctionBreakpointAction.ID, debugactions.AddFunctionBreakpointAction.LABEL));
// actions.push(new actionbar.Separator());
actions.push(this.instantiationService.createInstance(debugactions.AddFunctionBreakpointAction, debugactions.AddFunctionBreakpointAction.ID, debugactions.AddFunctionBreakpointAction.LABEL));
actions.push(new actionbar.Separator());
actions.push(this.instantiationService.createInstance(debugactions.ReapplyBreakpointsAction, debugactions.ReapplyBreakpointsAction.ID, debugactions.ReapplyBreakpointsAction.LABEL));
......
......@@ -395,7 +395,7 @@ class BreakpointsView extends viewlet.AdaptiveCollapsibleViewletView {
public getActions(): actions.IAction[] {
return [
// this.instantiationService.createInstance(debugactions.AddFunctionBreakpointAction, debugactions.AddFunctionBreakpointAction.ID, debugactions.AddFunctionBreakpointAction.LABEL),
this.instantiationService.createInstance(debugactions.AddFunctionBreakpointAction, debugactions.AddFunctionBreakpointAction.ID, debugactions.AddFunctionBreakpointAction.LABEL),
this.instantiationService.createInstance(debugactions.ReapplyBreakpointsAction, debugactions.ReapplyBreakpointsAction.ID, debugactions.ReapplyBreakpointsAction.LABEL),
this.instantiationService.createInstance(debugactions.ToggleBreakpointsActivatedAction, debugactions.ToggleBreakpointsActivatedAction.ID, debugactions.ToggleBreakpointsActivatedAction.LABEL),
this.instantiationService.createInstance(debugactions.RemoveAllBreakpointsAction, debugactions.RemoveAllBreakpointsAction.ID, debugactions.RemoveAllBreakpointsAction.LABEL)
......
......@@ -86,6 +86,7 @@ export interface IBreakpoint extends IEnablement {
export interface IFunctionBreakpoint extends IEnablement {
name: string;
verified: boolean;
}
export interface IExceptionBreakpoint extends IEnablement {
......
......@@ -301,10 +301,10 @@ export class Breakpoint implements debug.IBreakpoint {
export class FunctionBreakpoint implements debug.IFunctionBreakpoint {
private id: string;
public error: boolean;
public verified: boolean;
constructor(public name: string, public enabled: boolean) {
this.error = false;
this.verified = false;
this.id = uuid.generateUuid();
}
......
......@@ -226,7 +226,7 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
private registerSessionListeners(): void {
this.toDispose.push(this.session.addListener2(debug.SessionEvents.INITIALIZED, (event: DebugProtocol.InitializedEvent) =>
this.sendAllBreakpoints().then(() => this.sendExceptionBreakpoints()).then(() => {
this.sendAllBreakpoints().then(() => {
if (this.session.capablities.supportsConfigurationDoneRequest) {
this.session.configurationDone().done(null, errors.onUnexpectedError);
}
......@@ -413,8 +413,7 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
const breakpoint = <model.Breakpoint> element;
return this.sendBreakpoints(breakpoint.source.uri);
} else if (element instanceof model.FunctionBreakpoint) {
return TPromise.as(null);
// TODO@Isidor send function breakpoints and return
return this.sendFunctionBreakpoints();
}
return this.sendExceptionBreakpoints();
......@@ -445,20 +444,17 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
public addFunctionBreakpoint(functionName?: string): TPromise<void> {
this.model.addFunctionBreakpoint(functionName);
// TODO@Isidor send updated function breakpoints
return TPromise.as(null);
return this.sendFunctionBreakpoints();
}
public renameFunctionBreakpoint(id: string, newFunctionName: string): TPromise<void> {
this.model.renameFunctionBreakpoint(id, newFunctionName);
// TODO@Isidor send updated function breakpoints
return TPromise.as(null);
return this.sendFunctionBreakpoints();
}
public removeFunctionBreakpoints(id?: string): TPromise<void> {
this.model.removeFunctionBreakpoints(id);
// TODO@Isidor send updated function breakpoints
return TPromise.as(null);
return this.sendFunctionBreakpoints();
}
public addReplExpression(name: string): TPromise<void> {
......@@ -784,12 +780,15 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
}
public sendAllBreakpoints(): TPromise<any> {
return TPromise.join(arrays.distinct(this.model.getBreakpoints(), bp => bp.source.uri.toString()).map(bp => this.sendBreakpoints(bp.source.uri)));
return TPromise.join(arrays.distinct(this.model.getBreakpoints(), bp => bp.source.uri.toString()).map(bp => this.sendBreakpoints(bp.source.uri)))
.then(() => this.sendFunctionBreakpoints())
// send exception breakpoints at the end since some debug adapters rely on the order
.then(() => this.sendExceptionBreakpoints());
}
private sendBreakpoints(modelUri: uri): TPromise<void> {
if (!this.session || !this.session.readyForBreakpoints) {
return TPromise.as(undefined);
return TPromise.as(null);
}
const breakpointsToSend = arrays.distinct(
......@@ -810,13 +809,25 @@ export class DebugService extends ee.EventEmitter implements debug.IDebugService
});
}
private sendFunctionBreakpoints(): TPromise<void> {
if (!this.session || !this.session.readyForBreakpoints) {
return TPromise.as(null);
}
const breakpoints = this.model.getFunctionBreakpoints().filter(fbp => fbp.enabled);
return this.session.setFunctionBreakpoints({ breakpoints }).then(response => {
let index = 0;
breakpoints.forEach(bp => bp.verified = response.body.breakpoints[index++].verified);
});
}
private sendExceptionBreakpoints(): TPromise<any> {
if (!this.session || !this.session.readyForBreakpoints) {
return TPromise.as(undefined);
return TPromise.as(null);
}
const enabledExBreakpoints = this.model.getExceptionBreakpoints().filter(exb => exb.enabled);
return this.session.setExceptionBreakpoints({ filters: enabledExBreakpoints.map(exb => exb.name) });
const enabledExceptionBps = this.model.getExceptionBreakpoints().filter(exb => exb.enabled);
return this.session.setExceptionBreakpoints({ filters: enabledExceptionBps.map(exb => exb.name) });
}
private onFileChanges(fileChangesEvent: FileChangesEvent): void {
......
......@@ -136,6 +136,10 @@ export class RawDebugSession extends v8.V8Protocol implements debug.IRawDebugSes
return this.send('setBreakpoints', args);
}
public setFunctionBreakpoints(args: DebugProtocol.SetFunctionBreakpointsArguments): TPromise<DebugProtocol.SetFunctionBreakpointsResponse> {
return this.send('setFunctionBreakpoints', args);
}
public setExceptionBreakpoints(args: DebugProtocol.SetExceptionBreakpointsArguments): TPromise<DebugProtocol.SetExceptionBreakpointsResponse> {
return this.send('setExceptionBreakpoints', args);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册