Как я могу отлаживать поля частного класса в Node.js с помощью VS Code?

Как проверить содержимое закрытых полей экземпляра класса во время выполнения при отладке приложения Node в VS Code?

Это должно быть что-то простое, но почему-то кажется невозможным...

Если это невозможно, то каковы обходные пути?

Я использую:

  • узел 15.3.0
  • Код ВС 1.51.1
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
991
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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];
        // ...
    }
}

Я полагаю, что с тех пор VSCode добавил поддержку отладчика для закрытых полей в выпуске v1.56.1 от апреля 2021 года: github.com/microsoft/vscode-js-debug/blob/main/…

Ixrec 24.05.2021 17:17

Да, они сделали! 🎉

Leonardo Raele 25.05.2021 19:18

У меня сборка 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 Песочница: Нет

xenoterracide 02.12.2022 16:52

Другие вопросы по теме