Как проверить содержимое закрытых полей экземпляра класса во время выполнения при отладке приложения Node в VS Code?
Это должно быть что-то простое, но почему-то кажется невозможным...
Если это невозможно, то каковы обходные пути?
Я использую:
15.3.0
1.51.1
Обновлять:
Встроенный в VS Code отладчик javascript не поддерживал отладку полей частного класса на момент этого вопроса. Это происходит сейчас, начиная с версии 1.56.0 (апрель 2021 г.).
Старый ответ:
Встроенный в VS Code отладчик JavaScript (ms-vscode.js-debug ) пока не поддерживает поля закрытого класса. (для этого есть запрос функции на github)
Тем не менее, в v8 есть метод (в настоящее время в экспериментальном состоянии) для чтения полей приватного класса . Я сделал концептуальный проект ( leonardoraele/private-field-inspect ), в котором используется Node API инспектора для программного открытия сеанса отладки во время выполнения для чтения содержимого переменной. (это не прерывает выполнение во время выполнения)
Это работает, но с несколькими оговорками.
Использование:
import inspect from '../path/to/private-field-inspect';
class Subject
{
publicValue = 'not so secret';
#secretValue = 'my secret';
}
const subject = new Subject();
inspect(subject)
.then(console.debug);
Выход:
{ publicValue: 'not so secret', '#secretValue': 'my secret' }
Приведенный выше обходной путь меня не устраивает, поэтому я думаю, что лучше по возможности избегать использования полей закрытого класса, пока они не будут должным образом поддерживаться отладчиками. Вместо этого используйте символы, чтобы скрыть частные переменные.
Пример:
// my-class.js (or .msj)
const PRIVATE = {
SECRET_VAL = Symbol('#secretVal');
};
export default class Subject {
// ms-vscode.js-debug can read it, but other modules can't
[PRIVATE.SECRET_VAL]: 'my secret';
doSomething()
{
const secret = this[PRIVATE.SECRET_VAL];
// ...
}
}
Да, они сделали! 🎉
У меня сборка 2022 года и я их не вижу, что мне не хватает Версия: 1.73.1 (Универсальная) Коммит: 6261075646f055b99068d3688932416f2346dd3b Дата: 2022-11-09T02:08:38.961Z Электрон: 19.0.17 Хром: 1 02.0.5005.167 Node.js: 16.14.2 V8: 10.2.154.15-electron.0 ОС: Darwin arm64 22.1.0 Песочница: Нет
Я полагаю, что с тех пор VSCode добавил поддержку отладчика для закрытых полей в выпуске v1.56.1 от апреля 2021 года: github.com/microsoft/vscode-js-debug/blob/main/…