From 4854ac31ad3503d46cf298c79a95488f1cf5e86e Mon Sep 17 00:00:00 2001 From: isidor Date: Thu, 27 Apr 2017 17:47:55 +0200 Subject: [PATCH] fixes #25104 --- src/vs/workbench/parts/debug/common/debugModel.ts | 8 ++------ src/vs/workbench/parts/debug/common/debugSource.ts | 14 ++++++++++++-- .../parts/debug/electron-browser/debugService.ts | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/parts/debug/common/debugModel.ts b/src/vs/workbench/parts/debug/common/debugModel.ts index 69e1f16c9e3..d1189a6d8ce 100644 --- a/src/vs/workbench/parts/debug/common/debugModel.ts +++ b/src/vs/workbench/parts/debug/common/debugModel.ts @@ -24,7 +24,6 @@ import { Source } from 'vs/workbench/parts/debug/common/debugSource'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; const MAX_REPL_LENGTH = 10000; -const UNKNOWN_SOURCE_LABEL = nls.localize('unknownSource', "Unknown Source"); export abstract class AbstractOutputElement implements ITreeElement { private static ID_COUNTER = 0; @@ -388,7 +387,7 @@ export class StackFrame implements IStackFrame { public openInEditor(editorService: IWorkbenchEditorService, preserveFocus?: boolean, sideBySide?: boolean): TPromise { - return this.source.name === UNKNOWN_SOURCE_LABEL ? TPromise.as(null) : editorService.openEditor({ + return !this.source.available ? TPromise.as(null) : editorService.openEditor({ resource: this.source.uri, description: this.source.origin, options: { @@ -466,10 +465,7 @@ export class Thread implements IThread { } return response.body.stackFrames.map((rsf, level) => { - if (!rsf) { - return new StackFrame(this, 0, new Source({ name: UNKNOWN_SOURCE_LABEL }, rsf.presentationHint), nls.localize('unknownStack', "Unknown stack location"), null, null); - } - let source = rsf.source ? new Source(rsf.source, rsf.source.presentationHint) : new Source({ name: UNKNOWN_SOURCE_LABEL }, rsf.presentationHint); + let source = new Source(rsf.source, rsf.source ? rsf.source.presentationHint : rsf.presentationHint); if (this.process.sources.has(source.uri.toString())) { const alreadyCreatedSource = this.process.sources.get(source.uri.toString()); alreadyCreatedSource.presenationHint = source.presenationHint; diff --git a/src/vs/workbench/parts/debug/common/debugSource.ts b/src/vs/workbench/parts/debug/common/debugSource.ts index e182757cab4..103ec1d9ec8 100644 --- a/src/vs/workbench/parts/debug/common/debugSource.ts +++ b/src/vs/workbench/parts/debug/common/debugSource.ts @@ -3,16 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import * as nls from 'vs/nls'; import uri from 'vs/base/common/uri'; import { DEBUG_SCHEME } from 'vs/workbench/parts/debug/common/debug'; +const UNKNOWN_SOURCE_LABEL = nls.localize('unknownSource', "Unknown Source"); + export class Source { public uri: uri; constructor(public raw: DebugProtocol.Source, public presenationHint: string) { - const path = raw.path || raw.name; - this.uri = raw.sourceReference > 0 ? uri.parse(`${DEBUG_SCHEME}:${path}`) : uri.file(path); + if (!raw) { + this.raw = { name: UNKNOWN_SOURCE_LABEL }; + } + const path = this.raw.path || this.raw.name; + this.uri = this.raw.sourceReference > 0 ? uri.parse(`${DEBUG_SCHEME}:${path}`) : uri.file(path); } public get name() { @@ -27,6 +33,10 @@ export class Source { return this.raw.sourceReference; } + public get available() { + return this.raw.name !== UNKNOWN_SOURCE_LABEL; + } + public get inMemory() { return this.uri.toString().indexOf(`${DEBUG_SCHEME}:`) === 0; } diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index f59f7e1f828..359b940f29d 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -294,7 +294,7 @@ export class DebugService implements debug.IDebugService { thread.fetchCallStack().then(callStack => { if (callStack.length > 0 && !this.viewModel.focusedStackFrame) { // focus first stack frame from top that has source location if no other stack frame is focussed - const stackFrameToFocus = first(callStack, sf => !!sf.source, callStack[0]); + 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.lineNumber));