提交 0913b0c9 编写于 作者: I isidor

Distinguish DA exit events from debugee exit events

fixes #48805
上级 505c9392
......@@ -115,7 +115,7 @@ export interface ISession {
custom(request: string, args: any): TPromise<DebugProtocol.Response>;
onDidEvent: Event<DebugProtocol.Event>;
onDidInitialize: Event<DebugProtocol.InitializedEvent>;
onDidExitAdapter: Event<DebugEvent>;
onDidExitAdapter: Event<{ sessionId: string }>;
restartFrame(args: DebugProtocol.RestartFrameArguments, threadId: number): TPromise<DebugProtocol.RestartFrameResponse>;
next(args: DebugProtocol.NextArguments): TPromise<DebugProtocol.NextResponse>;
......
......@@ -70,8 +70,6 @@ export class RawDebugSession implements debug.ISession {
public emittedStopped: boolean;
public readyForBreakpoints: boolean;
//private serverProcess: cp.ChildProcess;
//private socket: net.Socket = null;
private cachedInitServerP: TPromise<void>;
private startTime: number;
public disconnected: boolean;
......@@ -83,7 +81,8 @@ export class RawDebugSession implements debug.ISession {
private readonly _onDidStop: Emitter<DebugProtocol.StoppedEvent>;
private readonly _onDidContinued: Emitter<DebugProtocol.ContinuedEvent>;
private readonly _onDidTerminateDebugee: Emitter<SessionTerminatedEvent>;
private readonly _onDidExitAdapter: Emitter<SessionExitedEvent>;
private readonly _onDidExitDebugee: Emitter<DebugProtocol.ExitedEvent>;
private readonly _onDidExitAdapter: Emitter<{ sessionId: string }>;
private readonly _onDidThread: Emitter<DebugProtocol.ThreadEvent>;
private readonly _onDidOutput: Emitter<DebugProtocol.OutputEvent>;
private readonly _onDidBreakpoint: Emitter<DebugProtocol.BreakpointEvent>;
......@@ -109,7 +108,8 @@ export class RawDebugSession implements debug.ISession {
this._onDidStop = new Emitter<DebugProtocol.StoppedEvent>();
this._onDidContinued = new Emitter<DebugProtocol.ContinuedEvent>();
this._onDidTerminateDebugee = new Emitter<SessionTerminatedEvent>();
this._onDidExitAdapter = new Emitter<SessionExitedEvent>();
this._onDidExitDebugee = new Emitter<DebugProtocol.ExitedEvent>();
this._onDidExitAdapter = new Emitter<{ sessionId: string }>();
this._onDidThread = new Emitter<DebugProtocol.ThreadEvent>();
this._onDidOutput = new Emitter<DebugProtocol.OutputEvent>();
this._onDidBreakpoint = new Emitter<DebugProtocol.BreakpointEvent>();
......@@ -137,7 +137,11 @@ export class RawDebugSession implements debug.ISession {
return this._onDidTerminateDebugee.event;
}
public get onDidExitAdapter(): Event<SessionExitedEvent> {
public get onDidExitDebugee(): Event<DebugProtocol.ExitedEvent> {
return this._onDidExitDebugee.event;
}
public get onDidExitAdapter(): Event<{ sessionId: string }> {
return this._onDidExitAdapter.event;
}
......@@ -189,10 +193,10 @@ export class RawDebugSession implements debug.ISession {
this.debugAdapter = debugAdapter;
this.debugAdapter.onError(err => this.onDapServerError(err));
this.debugAdapter.onError(err => this.onDebugAdapterError(err));
this.debugAdapter.onEvent(event => this.onDapEvent(event));
this.debugAdapter.onRequest(request => this.dispatchRequest(request));
this.debugAdapter.onExit(code => this.onServerExit());
this.debugAdapter.onExit(code => this.onDebugAdapterExit());
return this.debugAdapter.startSession();
});
......@@ -283,7 +287,7 @@ export class RawDebugSession implements debug.ISession {
} else if (event.event === 'terminated') {
this._onDidTerminateDebugee.fire(<SessionTerminatedEvent>event);
} else if (event.event === 'exit') {
this._onDidExitAdapter.fire(<SessionExitedEvent>event);
this._onDidExitDebugee.fire(<SessionExitedEvent>event);
} else {
this._onDidCustomEvent.fire(event);
}
......@@ -517,8 +521,8 @@ export class RawDebugSession implements debug.ISession {
this.cachedInitServerP = null;
}
this.onDapEvent({ event: 'exit', type: 'event', seq: 0 });
if (/* !this.serverProcess */ this.debugAdapter instanceof SocketDebugAdapter) {
this._onDidExitAdapter.fire({ sessionId: this.getId() });
if (this.debugAdapter instanceof SocketDebugAdapter) {
return TPromise.as(null);
}
......@@ -527,19 +531,18 @@ export class RawDebugSession implements debug.ISession {
return this.debugAdapter.stopSession();
}
private onDapServerError(err: Error): void {
private onDebugAdapterError(err: Error): void {
this.notificationService.error(err.message || err.toString());
this.stopServer().done(null, errors.onUnexpectedError);
}
private onServerExit(): void {
//this.serverProcess = null;
private onDebugAdapterExit(): void {
this.debugAdapter = null;
this.cachedInitServerP = null;
if (!this.disconnected) {
this.notificationService.error(nls.localize('debugAdapterCrash', "Debug adapter process has terminated unexpectedly"));
}
this.onDapEvent({ event: 'exit', type: 'event', seq: 0 });
this._onDidExitAdapter.fire({ sessionId: this.getId() });
}
public dispose(): void {
......
......@@ -176,8 +176,8 @@ export class MockSession implements ISession {
return emitter.event;
}
public get onDidExitAdapter(): Event<DebugEvent> {
const emitter = new Emitter<DebugEvent>();
public get onDidExitAdapter(): Event<{ sessionId: string }> {
const emitter = new Emitter<{ sessionId: string }>();
return emitter.event;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册