Mic*_*lus 6 visual-studio-code vscode-extensions vscode-debugger
我正在为 Visual Studio 代码编写一个扩展,我想在其中评估 javascript 调试会话的当前变量。当打开该部分下的调试窗格时,通常会显示这些变量VARIABLES
。请参阅随附的屏幕截图。
我想在用户右键单击编辑器时访问这些变量,但我不知道如何操作。
我当前的扩展设置是这样的:在package.json
我已经注册了一个菜单贡献和一个命令:
"contributes": {
"menus": {
"editor/context": [{
"command": "extension.showVariables",
"group": "navigation"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 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);
});
}
Run Code Online (Sandbox Code Playgroud)
我试图让它们通过,vscode.debug.activeDebugSession
但这里没有变量的 API。我还尝试注册一个事件处理程序,vscode.debug.onDidReceiveDebugSessionCustomEvent
但我不知道在哪里搜索调试变量。
是否可以在 vs 扩展中访问这些变量,或者我是否需要实现自己的调试器?
我已经设法访问局部变量,尽管这不是通用解决方案 - 它可能只能在单线程调试器中工作。如果您知道更好的方法,请回答或评论。
比如说,调试器中断了一个具有局部变量的方法car
。
为了获取 的值,我在活动调试会话上car
使用该方法:customRequest
const session = vscode.debug.activeDebugSession;
const response = await session.customRequest('evaluate', { expression: 'car', frameId: frameId });
const car = response.result;
Run Code Online (Sandbox Code Playgroud)
为了获取frameId,我使用了另一个调用customRequest
:
const session = vscode.debug.activeDebugSession;
const response = await session.customRequest('stackTrace', { threadId: 1 })
const frameId = response.stackFrames[0].id;
Run Code Online (Sandbox Code Playgroud)
为了在我的扩展中获取真实的汽车对象(不是字符串表示形式),我在 customRequest"JSON.stringify(car)"
中作为表达式传递evaluate
。然后,我就可以使用JSON.parse(response.result)
.
要获取所有范围、堆栈和变量,请查看 Debug Session API和DebugProtocol的规范。
归档时间: |
|
查看次数: |
6285 次 |
最近记录: |