提交 6ba48011 编写于 作者: I isidor

debug: tryToAutoFocusStackFrame

fixes #25104
上级 bcdbc335
...@@ -126,7 +126,8 @@ export class DebugService implements debug.IDebugService { ...@@ -126,7 +126,8 @@ export class DebugService implements debug.IDebugService {
// Some adapters might not respect the number levels in StackTraceRequest and might // Some adapters might not respect the number levels in StackTraceRequest and might
// return more stackFrames than requested. For those do not send an additional stackTrace request. // return more stackFrames than requested. For those do not send an additional stackTrace request.
if (callStack.length <= 1) { if (callStack.length <= 1) {
this.model.fetchCallStack(focusedThread).done(undefined, errors.onUnexpectedError); this.model.fetchCallStack(focusedThread).done(() =>
this.tryToAutoFocusStackFrame(focusedThread), errors.onUnexpectedError);
} }
} }
}, 420); }, 420);
...@@ -264,6 +265,25 @@ export class DebugService implements debug.IDebugService { ...@@ -264,6 +265,25 @@ export class DebugService implements debug.IDebugService {
} }
} }
private tryToAutoFocusStackFrame(thread: debug.IThread): TPromise<any> {
const callStack = thread.getCallStack();
if (!callStack.length || this.viewModel.focusedStackFrame) {
return TPromise.as(null);
}
// focus first stack frame from top that has source location if no other stack frame is focussed
const stackFrameToFocus = first(callStack, sf => sf.source && sf.source.available, undefined);
if (!stackFrameToFocus) {
return TPromise.as(null);
}
this.focusStackFrameAndEvaluate(stackFrameToFocus).done(null, errors.onUnexpectedError);
this.windowService.getWindow().focus();
aria.alert(nls.localize('debuggingPaused', "Debugging paused, reason {0}, {1} {2}", thread.stoppedDetails.reason, stackFrameToFocus.source ? stackFrameToFocus.source.name : '', stackFrameToFocus.range.startLineNumber));
return stackFrameToFocus.openInEditor(this.editorService);
}
private registerSessionListeners(process: Process, session: RawDebugSession): void { private registerSessionListeners(process: Process, session: RawDebugSession): void {
this.toDisposeOnSessionEnd.get(session.getId()).push(session); this.toDisposeOnSessionEnd.get(session.getId()).push(session);
this.toDisposeOnSessionEnd.get(session.getId()).push(session.onDidInitialize(event => { this.toDisposeOnSessionEnd.get(session.getId()).push(session.onDidInitialize(event => {
...@@ -307,18 +327,8 @@ export class DebugService implements debug.IDebugService { ...@@ -307,18 +327,8 @@ export class DebugService implements debug.IDebugService {
// Call fetch call stack twice, the first only return the top stack frame. // 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 // Second retrieves the rest of the call stack. For performance reasons #25605
this.model.fetchCallStack(thread).then(() => { this.model.fetchCallStack(thread).then(() => {
const callStack = thread.getCallStack();
this.callStackScheduler.schedule(); this.callStackScheduler.schedule();
if (callStack.length > 0 && !this.viewModel.focusedStackFrame) { return this.tryToAutoFocusStackFrame(thread);
// focus first stack frame from top that has source location if no other stack frame is focussed
const stackFrameToFocus = first(callStack, sf => sf.source && sf.source.available, callStack[0]);
this.focusStackFrameAndEvaluate(stackFrameToFocus).done(null, errors.onUnexpectedError);
this.windowService.getWindow().focus();
aria.alert(nls.localize('debuggingPaused', "Debugging paused, reason {0}, {1} {2}", event.body.reason, stackFrameToFocus.source ? stackFrameToFocus.source.name : '', stackFrameToFocus.range.startLineNumber));
return stackFrameToFocus.openInEditor(this.editorService);
}
return undefined;
}); });
} }
}, errors.onUnexpectedError); }, errors.onUnexpectedError);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册