gpt4 book ai didi

visual-studio-code - VS 代码 : How to access debug variables from within extension?

转载 作者:行者123 更新时间:2023-12-03 19:35:11 25 4
gpt4 key购买 nike

我正在为 Visual Studio 代码编写一个扩展,我想在其中评估 javascript 调试 session 的当前变量。这些变量通常在打开 VARIABLES 部分下的调试 Pane 时显示。 .请参阅随附的屏幕截图。

Debug variables pane in visual studio code

我想在用户右键单击编辑器时访问这些变量,但我不知道如何。

我当前的扩展设置是这样的:在 package.json 中我已经注册了一个菜单贡献和一个命令:

"contributes": {
"menus": {
"editor/context": [{
"command": "extension.showVariables",
"group": "navigation"
}]
}
}

在我的 extension.ts 中,我注册了这样的命令:
export function activate(context: vscode.ExtensionContext) {

let disposable = vscode.commands.registerCommand('extension.showVariables', () => {

// TODO: let variables = vscode.debug.activeDebugSession.variables.toString();

vscode.window.showInformationMessage(variables);
});
}

我试图让他们通过 vscode.debug.activeDebugSession但是这里没有变量的 API。我还尝试为 vscode.debug.onDidReceiveDebugSessionCustomEvent 注册事件处理程序但我不知道在哪里搜索调试变量。

甚至可以在 vs 扩展中访问这些变量还是我需要实现自己的调试器?

最佳答案

我设法访问了局部变量,尽管这不是通用的解决方案 - 它可能只能在单线程调试器中工作。如果您知道任何更好的方法,请回答或评论。

比如说,调试器中断了一个具有局部变量 car 的方法。 .

获取car的值,我正在使用 customRequest事件调试 session 上的方法:

const session = vscode.debug.activeDebugSession;
const response = await session.customRequest('evaluate', { expression: 'car', frameId: frameId });
const car = response.result;

为了获取 frameId,我使用了另一个调用 customRequest :
const session = vscode.debug.activeDebugSession;
const response = await session.customRequest('stackTrace', { threadId: 1 })
const frameId = response.stackFrames[0].id;

为了在我的扩展中获得一个真正的汽车对象(不是字符串表示),我传递了 "JSON.stringify(car)"作为 evaluate 中的表达式自定义请求。然后,我可以使用 JSON.parse(response.result) .

要获取所有范围、堆栈和变量,请查看
Debug Session API以及 DebugProtocol 的规范.

关于visual-studio-code - VS 代码 : How to access debug variables from within extension?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50287482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com