提交 f793a7c5 编写于 作者: I isidor

debug: display call stack error from adapter

fixes #6100
上级 12ac396c
......@@ -241,6 +241,9 @@ export class CallStackDataSource implements tree.IDataSource {
if (typeof element === 'number') {
return element.toString();
}
if (typeof element === 'string') {
return element;
}
return element.getId();
}
......@@ -260,6 +263,9 @@ export class CallStackDataSource implements tree.IDataSource {
private getThreadChildren(thread: debug.IThread): TPromise<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) {
return callStack.concat([thread.threadId]);
}
......@@ -280,6 +286,10 @@ interface IThreadTemplateData {
stateLabel: HTMLSpanElement;
}
interface IErrorTemplateData {
label: HTMLElement;
}
interface ILoadMoreTemplateData {
label: HTMLElement;
}
......@@ -296,6 +306,7 @@ export class CallStackRenderer implements tree.IRenderer {
private static THREAD_TEMPLATE_ID = 'thread';
private static STACK_FRAME_TEMPLATE_ID = 'stackFrame';
private static ERROR_TEMPLATE_ID = 'error';
private static LOAD_MORE_TEMPLATE_ID = 'loadMore';
constructor( @IWorkspaceContextService private contextService: IWorkspaceContextService) {
......@@ -313,6 +324,9 @@ export class CallStackRenderer implements tree.IRenderer {
if (element instanceof model.StackFrame) {
return CallStackRenderer.STACK_FRAME_TEMPLATE_ID;
}
if (typeof element === 'string') {
return CallStackRenderer.ERROR_TEMPLATE_ID;
}
return CallStackRenderer.LOAD_MORE_TEMPLATE_ID;
}
......@@ -324,6 +338,12 @@ export class CallStackRenderer implements tree.IRenderer {
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) {
let data: IThreadTemplateData = Object.create(null);
data.thread = dom.append(container, $('.thread'));
......@@ -349,6 +369,8 @@ export class CallStackRenderer implements tree.IRenderer {
this.renderThread(element, templateData);
} else if (templateId === CallStackRenderer.STACK_FRAME_TEMPLATE_ID) {
this.renderStackFrame(element, templateData);
} else if (templateId === CallStackRenderer.ERROR_TEMPLATE_ID) {
this.renderError(element, templateData);
} else {
this.renderLoadMore(element, templateData);
}
......@@ -360,6 +382,11 @@ export class CallStackRenderer implements tree.IRenderer {
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 {
data.label.textContent = nls.localize('loadMoreStackFrames', "Load More Stack Frames");
}
......
......@@ -187,6 +187,12 @@
text-align: center;
}
.debug-viewlet .debug-call-stack .error {
font-style: italic;
text-overflow: ellipsis;
overflow: hidden;
}
/* Variables & Expression view */
.debug-viewlet .scope {
......
......@@ -34,6 +34,7 @@ export interface IRawStoppedDetails {
threadId?: number;
text?: string;
totalFrames?: number;
framesErrorMessage?: string;
}
// model
......
......@@ -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);
});
}, (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.
先完成此消息的编辑!
想要评论请 注册