我正在使用扩展中的VSCode调试API。我的目标是在调试会话期间从gdb / lldb调试器读取C ++程序的CPU寄存器。我还对其他调试器不提供的其他要求(读取内存,反汇编等)有类似要求
扩展程序中包含以下内容...如果需要,我可以提供完整的测试用例。是的,我知道我这里有个错误,因为第一次等待后,该会话可能不再处于活动状态,并且没有显示完整的错误检查。
static async getRegisters() {
const session = vscode.debug.activeDebugSession;
if (session && text) { // Make sure we still have a session
// The following gets me the right result
const sTrace = await session.customRequest('stackTrace', { threadId: 1 });
const frameId = sTrace.stackFrames[0].id;
// The following does execute but the results are printed to debug console
// rather than returning the result
// I tried many variations of arguments and contexts types
const text = '-exec -data-list-register-names';
const arg : DebugProtocol.EvaluateArguments = {expression: text, frameId: frameId, context:'hover'};
session.customRequest('evaluate', arg).then((response) => {
console.log(response.result);
});
}
}
我希望以某种方式将gdb的结果提供回我的扩展程序。结果将被打印到调试控制台,而我得到一个空字符串。我也尝试过为自定义命令设置事件处理程序vscode.debug.onDidReceiveDebugSessionCustomEvent
,但不会触发任何事件。有更好的方法吗?
也许customRequest
的第一个参数不应该是'evaluate'
,但是在DebugProtocol spec.中看不到其他任何东西可以向实际调试器发送自定义命令。
答案 0 :(得分:1)
同一期!这是我的解决方案:
DA似乎没有触发具有正确值的响应,而是直接触发了要在调试控制台上打印的事件。