提交 f793a7c5 编写于 作者: I isidor

debug: display call stack error from adapter

fixes #6100
上级 12ac396c
...@@ -241,6 +241,9 @@ export class CallStackDataSource implements tree.IDataSource { ...@@ -241,6 +241,9 @@ export class CallStackDataSource implements tree.IDataSource {
if (typeof element === 'number') { if (typeof element === 'number') {
return element.toString(); return element.toString();
} }
if (typeof element === 'string') {
return element;
}
return element.getId(); return element.getId();
} }
...@@ -260,6 +263,9 @@ export class CallStackDataSource implements tree.IDataSource { ...@@ -260,6 +263,9 @@ export class CallStackDataSource implements tree.IDataSource {
private getThreadChildren(thread: debug.IThread): TPromise<any> { private getThreadChildren(thread: debug.IThread): TPromise<any> {
return thread.getCallStack(this.debugService).then((callStack: any[]) => { return thread.getCallStack(this.debugService).then((callStack: any[]) => {
if (thread.stoppedDetails.framesErrorMessage) {
return callStack.concat([thread.stoppedDetails.framesErrorMessage]);
}
if (thread.stoppedDetails && thread.stoppedDetails.totalFrames > callStack.length) { if (thread.stoppedDetails && thread.stoppedDetails.totalFrames > callStack.length) {
return callStack.concat([thread.threadId]); return callStack.concat([thread.threadId]);
} }
...@@ -280,6 +286,10 @@ interface IThreadTemplateData { ...@@ -280,6 +286,10 @@ interface IThreadTemplateData {
stateLabel: HTMLSpanElement; stateLabel: HTMLSpanElement;
} }
interface IErrorTemplateData {
label: HTMLElement;
}
interface ILoadMoreTemplateData { interface ILoadMoreTemplateData {
label: HTMLElement; label: HTMLElement;
} }
...@@ -296,6 +306,7 @@ export class CallStackRenderer implements tree.IRenderer { ...@@ -296,6 +306,7 @@ export class CallStackRenderer implements tree.IRenderer {
private static THREAD_TEMPLATE_ID = 'thread'; private static THREAD_TEMPLATE_ID = 'thread';
private static STACK_FRAME_TEMPLATE_ID = 'stackFrame'; private static STACK_FRAME_TEMPLATE_ID = 'stackFrame';
private static ERROR_TEMPLATE_ID = 'error';
private static LOAD_MORE_TEMPLATE_ID = 'loadMore'; private static LOAD_MORE_TEMPLATE_ID = 'loadMore';
constructor( @IWorkspaceContextService private contextService: IWorkspaceContextService) { constructor( @IWorkspaceContextService private contextService: IWorkspaceContextService) {
...@@ -313,6 +324,9 @@ export class CallStackRenderer implements tree.IRenderer { ...@@ -313,6 +324,9 @@ export class CallStackRenderer implements tree.IRenderer {
if (element instanceof model.StackFrame) { if (element instanceof model.StackFrame) {
return CallStackRenderer.STACK_FRAME_TEMPLATE_ID; return CallStackRenderer.STACK_FRAME_TEMPLATE_ID;
} }
if (typeof element === 'string') {
return CallStackRenderer.ERROR_TEMPLATE_ID;
}
return CallStackRenderer.LOAD_MORE_TEMPLATE_ID; return CallStackRenderer.LOAD_MORE_TEMPLATE_ID;
} }
...@@ -324,6 +338,12 @@ export class CallStackRenderer implements tree.IRenderer { ...@@ -324,6 +338,12 @@ export class CallStackRenderer implements tree.IRenderer {
return data; return data;
} }
if (templateId === CallStackRenderer.ERROR_TEMPLATE_ID) {
let data: ILoadMoreTemplateData = Object.create(null);
data.label = dom.append(container, $('.error'));
return data;
}
if (templateId === CallStackRenderer.THREAD_TEMPLATE_ID) { if (templateId === CallStackRenderer.THREAD_TEMPLATE_ID) {
let data: IThreadTemplateData = Object.create(null); let data: IThreadTemplateData = Object.create(null);
data.thread = dom.append(container, $('.thread')); data.thread = dom.append(container, $('.thread'));
...@@ -349,6 +369,8 @@ export class CallStackRenderer implements tree.IRenderer { ...@@ -349,6 +369,8 @@ export class CallStackRenderer implements tree.IRenderer {
this.renderThread(element, templateData); this.renderThread(element, templateData);
} else if (templateId === CallStackRenderer.STACK_FRAME_TEMPLATE_ID) { } else if (templateId === CallStackRenderer.STACK_FRAME_TEMPLATE_ID) {
this.renderStackFrame(element, templateData); this.renderStackFrame(element, templateData);
} else if (templateId === CallStackRenderer.ERROR_TEMPLATE_ID) {
this.renderError(element, templateData);
} else { } else {
this.renderLoadMore(element, templateData); this.renderLoadMore(element, templateData);
} }
...@@ -360,6 +382,11 @@ export class CallStackRenderer implements tree.IRenderer { ...@@ -360,6 +382,11 @@ export class CallStackRenderer implements tree.IRenderer {
data.stateLabel.textContent = thread.stopped ? nls.localize('paused', "paused") : nls.localize('running', "running"); data.stateLabel.textContent = thread.stopped ? nls.localize('paused', "paused") : nls.localize('running', "running");
} }
private renderError(element: string, data: IErrorTemplateData) {
data.label.textContent = element;
data.label.title = nls.localize('stackFrameError', "An error occurred while requesting the stack trace");
}
private renderLoadMore(element: any, data: ILoadMoreTemplateData): void { private renderLoadMore(element: any, data: ILoadMoreTemplateData): void {
data.label.textContent = nls.localize('loadMoreStackFrames', "Load More Stack Frames"); data.label.textContent = nls.localize('loadMoreStackFrames', "Load More Stack Frames");
} }
......
...@@ -187,6 +187,12 @@ ...@@ -187,6 +187,12 @@
text-align: center; text-align: center;
} }
.debug-viewlet .debug-call-stack .error {
font-style: italic;
text-overflow: ellipsis;
overflow: hidden;
}
/* Variables & Expression view */ /* Variables & Expression view */
.debug-viewlet .scope { .debug-viewlet .scope {
......
...@@ -34,6 +34,7 @@ export interface IRawStoppedDetails { ...@@ -34,6 +34,7 @@ export interface IRawStoppedDetails {
threadId?: number; threadId?: number;
text?: string; text?: string;
totalFrames?: number; totalFrames?: number;
framesErrorMessage?: string;
} }
// model // model
......
...@@ -150,6 +150,9 @@ export class Thread implements debug.IThread { ...@@ -150,6 +150,9 @@ export class Thread implements debug.IThread {
return new StackFrame(this.threadId, rsf.id, rsf.source ? new Source(rsf.source) : new Source({ name: UNKNOWN_SOURCE_LABEL }, false), rsf.name, rsf.line, rsf.column); return new StackFrame(this.threadId, rsf.id, rsf.source ? new Source(rsf.source) : new Source({ name: UNKNOWN_SOURCE_LABEL }, false), rsf.name, rsf.line, rsf.column);
}); });
}, (err: Error) => {
this.stoppedDetails.framesErrorMessage = err.message;
return [];
}); });
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册