Почему меняются переменные ссылки протокола отладки адаптера? - PullRequest
0 голосов
/ 24 марта 2020

При создании расширения 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. Спасибо за любые разъяснения

...