提交 a0e5e178 编写于 作者: I isidor

The top stack frame can be deemphesized so try to focus again

fixes #68616
上级 564b7120
......@@ -820,22 +820,31 @@ export class DebugModel implements IDebugModel {
}
}
fetchCallStack(thread: Thread): Promise<void> {
fetchCallStack(thread: Thread): { topCallStack: Promise<void>, wholeCallStack: Promise<void> } {
if (thread.session.capabilities.supportsDelayedStackTraceLoading) {
// For improved performance load the first stack frame and then load the rest async.
return thread.fetchCallStack(1).then(() => {
if (!this.schedulers.has(thread.getId())) {
this.schedulers.set(thread.getId(), new RunOnceScheduler(() => {
thread.fetchCallStack(19).then(() => this._onDidChangeCallStack.fire());
}, 420));
}
this.schedulers.get(thread.getId())!.schedule();
let topCallStack: Promise<void>;
const wholeCallStack = new Promise<void>((c, e) => {
topCallStack = thread.fetchCallStack(1).then(() => {
if (!this.schedulers.has(thread.getId())) {
this.schedulers.set(thread.getId(), new RunOnceScheduler(() => {
thread.fetchCallStack(19).then(() => {
this._onDidChangeCallStack.fire();
c();
});
}, 420));
}
this.schedulers.get(thread.getId())!.schedule();
});
this._onDidChangeCallStack.fire();
});
return { topCallStack, wholeCallStack };
}
return thread.fetchCallStack();
const wholeCallStack = thread.fetchCallStack();
return { wholeCallStack, topCallStack: wholeCallStack };
}
getBreakpoints(filter?: { uri?: uri, lineNumber?: number, column?: number, enabledOnly?: boolean }): IBreakpoint[] {
......
......@@ -612,7 +612,8 @@ export class DebugSession implements IDebugSession {
if (thread) {
// Call fetch call stack twice, the first only return the top stack frame.
// Second retrieves the rest of the call stack. For performance reasons #25605
this.model.fetchCallStack(<Thread>thread).then(() => {
const promises = this.model.fetchCallStack(<Thread>thread);
const focus = () => {
if (!event.body.preserveFocusHint && thread.getCallStack().length) {
this.debugService.focusStackFrame(undefined, thread);
if (thread.stoppedDetails) {
......@@ -622,6 +623,14 @@ export class DebugSession implements IDebugSession {
this.windowService.focusWindow();
}
}
};
promises.topCallStack.then(focus);
promises.wholeCallStack.then(() => {
if (!this.debugService.getViewModel().focusedStackFrame) {
// The top stack frame can be deemphesized so try to focus again #68616
focus();
}
});
}
}).then(() => this._onDidChangeState.fire());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册