При создании расширения VSCode, где мне нужно идентифицировать объекты отлаженного процесса внутри расширения. Для этого я использую evaluate
запрос протокола адаптера отладки для запуска команд на отладчике, и я хочу использовать результат variablesReference
для идентификации конкретных c объектов. Однако я вижу, что несколько идентичных вызовов возвращают разные значения variablesReference
, вероятно, в зависимости от того, в каком кадре мы находимся. Предположим, у меня есть структура данных graph
в отладчике, и мне нужны переменныеReferences всех узлов:
public async update() {
this.session = vscode.debug.activeDebugSession as vscode.DebugSession;
const frameResp = await this.session.customRequest('stackTrace', { threadId: this.threadId })
.then(result => {
this.frameId = result.stackFrames[0].id;
console.log("New Frame " + this.frameId);
})
.then(undefined, err => {
console.error(err + ": frameId response undefined");
return;
});
const size = await this.session.customRequest('evaluate', { expression: "graph.nodes.size", frameId: this.frameId })
for (let i = 0; i < size.result; i++) {
const current = await this.session.customRequest('evaluate', { expression: `graph.nodes.get(${i})`, frameId: this.frameId })
console.log("Var " + i + ": " + current.variablesReference);
}
}
Выводит что-то вроде:
Новый кадр 1062 Var 0: 1021 Var 1: 1022 Var 2: 1023
Новый Frame 1040 Var 0: 1008 Var 1: 1009 Вар 2: 1010
Может кто-нибудь сказать мне, что именно ссылки, почему они меняются (и, возможно, как этого избежать), и если это даже предполагается использовать таким образом? Я не мог найти много информации о variableReferences на странице DAP. Спасибо за любые разъяснения