提交 c1d61225 编写于 作者: I isidor

onDidTerminateDebugSession do not fire when debug session doesn't start successfully

fixes #29666
上级 8a314069
......@@ -14,7 +14,7 @@ import { ICommandService } from 'vs/platform/commands/common/commands';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { IFileService } from 'vs/platform/files/common/files';
import { IMessageService } from 'vs/platform/message/common/message';
import { IDebugService, State, IProcess, IThread, IEnablement, IBreakpoint, IStackFrame, IFunctionBreakpoint, IDebugEditorContribution, EDITOR_CONTRIBUTION_ID, IExpression, REPL_ID }
import { IDebugService, State, IProcess, IThread, IEnablement, IBreakpoint, IStackFrame, IFunctionBreakpoint, IDebugEditorContribution, EDITOR_CONTRIBUTION_ID, IExpression, REPL_ID, ProcessState }
from 'vs/workbench/parts/debug/common/debug';
import { Variable, Expression, Thread, Breakpoint, Process } from 'vs/workbench/parts/debug/common/debugModel';
import { IPartService } from 'vs/workbench/services/part/common/partService';
......@@ -183,7 +183,7 @@ export class RestartAction extends AbstractDebugAction {
}
private setLabel(process: IProcess): void {
this.updateLabel(process && process.isAttach() ? RestartAction.RECONNECT_LABEL : RestartAction.LABEL);
this.updateLabel(process && process.state === ProcessState.ATTACH ? RestartAction.RECONNECT_LABEL : RestartAction.LABEL);
}
public run(process: IProcess): TPromise<any> {
......
......@@ -96,6 +96,7 @@ export interface ISession {
disconnect(restart?: boolean, force?: boolean): TPromise<DebugProtocol.DisconnectResponse>;
custom(request: string, args: any): TPromise<DebugProtocol.Response>;
onDidEvent: Event<DebugProtocol.Event>;
onDidInitialize: Event<DebugProtocol.InitializedEvent>;
restartFrame(args: DebugProtocol.RestartFrameArguments, threadId: number): TPromise<DebugProtocol.RestartFrameResponse>;
next(args: DebugProtocol.NextArguments): TPromise<DebugProtocol.NextResponse>;
......@@ -111,12 +112,18 @@ export interface ISession {
source(args: DebugProtocol.SourceArguments): TPromise<DebugProtocol.SourceResponse>;
}
export enum ProcessState {
INACTIVE,
ATTACH,
LAUNCH
}
export interface IProcess extends ITreeElement {
name: string;
configuration: IConfig;
session: ISession;
sources: Map<string, Source>;
isAttach(): boolean;
state: ProcessState;
getThread(threadId: number): IThread;
getAllThreads(): IThread[];
completions(frameId: number, text: string, position: Position, overwriteBefore: number): TPromise<ISuggestion[]>;
......
......@@ -20,7 +20,7 @@ import { ISuggestion } from 'vs/editor/common/modes';
import { Position } from 'vs/editor/common/core/position';
import {
ITreeElement, IExpression, IExpressionContainer, IProcess, IStackFrame, IExceptionBreakpoint, IBreakpoint, IFunctionBreakpoint, IModel,
IConfig, ISession, IThread, IRawModelUpdate, IScope, IRawStoppedDetails, IEnablement, IRawBreakpoint, IExceptionInfo, IReplElement
IConfig, ISession, IThread, IRawModelUpdate, IScope, IRawStoppedDetails, IEnablement, IRawBreakpoint, IExceptionInfo, IReplElement, ProcessState
} from 'vs/workbench/parts/debug/common/debug';
import { Source } from 'vs/workbench/parts/debug/common/debugSource';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
......@@ -543,12 +543,14 @@ export class Thread implements IThread {
export class Process implements IProcess {
private threads: Map<number, Thread>;
public sources: Map<string, Source>;
private threads: Map<number, Thread>;
private inactive = true;
constructor(public configuration: IConfig, private _session: ISession & ITreeElement) {
this.threads = new Map<number, Thread>();
this.sources = new Map<string, Source>();
this._session.onDidInitialize(() => this.inactive = false);
}
public get session(): ISession {
......@@ -559,8 +561,12 @@ export class Process implements IProcess {
return this.configuration.name;
}
public isAttach(): boolean {
return this.configuration.type === 'attach';
public get state(): ProcessState {
if (this.inactive) {
return ProcessState.INACTIVE;
}
return this.configuration.type === 'attach' ? ProcessState.ATTACH : ProcessState.LAUNCH;
}
public getThread(threadId: number): Thread {
......
......@@ -960,7 +960,7 @@ export class DebugService implements debug.IDebugService {
});
this.model.removeProcess(session.getId());
if (process) {
if (process && process.state !== debug.ProcessState.INACTIVE) {
this._onDidEndProcess.fire(process);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册