Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions public/index_image_panel.js
Original file line number Diff line number Diff line change
Expand Up @@ -336,23 +336,17 @@ class BreakpointCapture {
const workspaceFolder = this.vscodeMeta.workspaceFolder;
const sourcePathRelative = this.meta.source.path.replace(workspaceFolder, ".");
const sourcePathExp = `${sourcePathRelative}:${meta.line}:${meta.column}`;
this.frameInfoDom.innerHTML = `${sourcePathExp}`;

this.frameInfoDom.innerHTML = sourcePathExp;
this.frameInfoDom.onclick = () => {
console.log("Open file", meta.source.path, "pos:", [meta.line, meta.column]);
// revealTextFile(meta.frame.source.path, [meta.frame.line, meta.frame.column]);
vscodeOpen(meta.source.path, [meta.line, meta.column]);
};

this.frameInfoDom.innerHTML = `${this.meta.source.path}:${this.meta.line}:${this.meta.column}`;
}
addImageIdxCapture(imageTraceId, imageIdx) {
this.imageTraceIdxDict[imageTraceId] = imageIdx;
}

vscodeOpen(uri, pos = undefined) {
vscodeOpen(uri, pos);
}

setLink(prev, next) {
if (prev !== undefined) {
this.setPrev(prev);
Expand Down
130 changes: 48 additions & 82 deletions src/tracker.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import * as vscode from 'vscode';
import { VariableViewPanel } from './panel';
import { register } from 'module';

import { DebugSessionTracker } from './variable/debugSessionTracker';
import { DebugVariable } from './variable/debugVariable';
import { VariableTypeFactory } from './variable/variableTypeFactory';
Expand Down Expand Up @@ -30,44 +28,36 @@ export class VariableTracker implements vscode.DebugAdapterTracker {
}

async procImagePanel(message: any) {
VariableTypeFactory.loadSettings();
await this.initializeImagePanel();
const sessionTracker = this.setupSessionTracker(message);
const variables = await this.fetchVariables(sessionTracker, message);
const imageMetaWides = await this.processImageVariables(sessionTracker);
await this.renderImagePanel(imageMetaWides, message);
}

private async initializeImagePanel(): Promise<void> {
VariableTypeFactory.loadSettings();
VariableViewPanel.render(this._context);
const panel = VariableViewPanel.currentPanel;
if (panel) {
// panel.showPanel();
}
VariableViewPanel.sendInstanceMessage("WAIT FOR IMAGES...");
}


private setupSessionTracker(message: any): DebugSessionTracker {
const session = vscode.debug.activeDebugSession;

// Create new tracker to manage debug variables every frames and threads,
// not to share them among debug trackers even if they have same session.
DebugSessionTracker.newSessionTracker(this._context, session!);
let sessionTracker = DebugSessionTracker.currentTracker!;
const sessionTracker = DebugSessionTracker.currentTracker!;
DebugSessionTracker.breakCount++;
const threadId = message.body.threadId;

// const stackTrace = await session?.customRequest('stackTrace', { threadId });
// const frameId = stackTrace.stackFrames[0].id;
// const scopes = await session?.customRequest('scopes', { frameId });

// console.log(frameId);
// console.log(stackTrace);
// console.log("scopes", scopes);
// for (const scope of scopes.scopes) {
// const variables = await session?.customRequest('variables', { variablesReference: scope.variablesReference });
// console.log(variables);
// // Here you can process the variables as needed
// }
return sessionTracker;
}

private async fetchVariables(sessionTracker: DebugSessionTracker, message: any): Promise<DebugVariable[]> {
const threadId = message.body.threadId;
console.log("fetchLocalVariablesInFirstFrame", sessionTracker);

const thread = sessionTracker.addThread(threadId, [], message.body);
const variables = await thread.fetchLocalVariablesInFirstFrame();
console.log("fetchLocalVariablesInFirstFrame", variables);

let values: any = [];
const values: any = [];
variables.forEach((variable: DebugVariable) => {
values.push(variable.getVariableValuesAsDict());
});
Expand All @@ -76,44 +66,34 @@ export class VariableTracker implements vscode.DebugAdapterTracker {
const allVariables = sessionTracker.gatherAllVariables();
console.log(allVariables);

return variables;
}

private async processImageVariables(sessionTracker: DebugSessionTracker): Promise<any[]> {
const imageVariables: ImageVariable[] = sessionTracker.gatherImageVariables();
console.log(imageVariables);

const imageMetaWides = [];
for (const imageVariable of imageVariables) {
imageVariable.updateImageInfo();
imageVariable.updateBinaryInfo();
const metaWide = await imageVariable.toFile(); // toFile() may return undefined if the image could not read properly.
const metaWide = await imageVariable.toFile();
if (metaWide) {
imageMetaWides.push(metaWide);
}
// imageVariable.toFile();
}

return imageMetaWides;
}

private async renderImagePanel(imageMetaWides: any[], message: any): Promise<void> {
console.log("rendering panel");
VariableViewPanel.render(this._context, "image-panel");
const panel = VariableViewPanel.currentPanel;

if (panel) {
// Set web url
for (const metaWide of imageMetaWides) {
metaWide.imageWebUrl = panel.getWebViewUrlString(vscode.Uri.file(metaWide.vscode.filePath));
}
console.log("imageMetaWides", imageMetaWides);

// Display
// const openPath = vscode.Uri.file(filePath.toString()).toString().replace("/file:", "");
// vscode.commands.executeCommand('vscode.open', filePath.fsPath);
console.log("showing images on panel", panel);
const workspaceFolders = vscode.workspace.workspaceFolders;
panel.postMessage({
command: "images",
metas: imageMetaWides,
breakpointMeta: message.body,
vscodeMeta: { workspaceFolders }

});
panel.showPanel();

this.setImageWebUrls(panel, imageMetaWides);
this.displayImages(panel, imageMetaWides, message);
console.log("DONE!!");
} else {
console.log("panel is undefined");
Expand All @@ -124,39 +104,25 @@ export class VariableTracker implements vscode.DebugAdapterTracker {
VariableViewPanel.sendInstanceMessage("DONE!");
}

// public onDidSendMessage(message: any) {
// console.log(Object.assign({}, message));
// if ((message.type === 'event' && message.event === 'output') ||
// (message.type === 'response' && message.command === 'evaluate')) {
// console.log(Object.assign({}, message));
// if ((message.body && message.body.category === 'stdout') ||
// (message.boy)) {
// console.log('message.body', message.body);
// if (!this._panel) {
// console.log("this._panel is undefined")
// this._panel = new VariableViewPanel(this._context);
// }
// else{
// console.log("this._panel is NOT undefined")
// }
// console.log("this._panel.isPanelExist 1", this._panel.isPanelExist());
// this._panel.render();
// this._panel.showPanel(vscode.ViewColumn.Two);
// console.log("this._panel.isPanelExist 2", this._panel.isPanelExist());

// let variableOut = {
// message,
// name: message.body.variablesReference,
// value: message.body.output
// };

// console.log("this._panel.isPanelExist 3", this._panel.isPanelExist());
// console.log("posting message to panel")
// this._panel.postMessage({ command: 'variable', output: variableOut });
// console.log("this._panel.isPanelExist 4", this._panel.isPanelExist());
// }
// }
// }
private setImageWebUrls(panel: VariableViewPanel, imageMetaWides: any[]): void {
for (const metaWide of imageMetaWides) {
metaWide.imageWebUrl = panel.getWebViewUrlString(vscode.Uri.file(metaWide.vscode.filePath));
}
console.log("imageMetaWides", imageMetaWides);
}

private displayImages(panel: VariableViewPanel, imageMetaWides: any[], message: any): void {
console.log("showing images on panel", panel);
const workspaceFolders = vscode.workspace.workspaceFolders;

panel.postMessage({
command: "images",
metas: imageMetaWides,
breakpointMeta: message.body,
vscodeMeta: { workspaceFolders }
});
panel.showPanel();
}
}


Expand Down