【问题标题】:How can I debug private class fields in Node.js with VS Code?如何使用 VS Code 调试 Node.js 中的私有类字段?
【发布时间】:2020-12-10 01:25:46
【问题描述】:

如何在运行时检查类实例的私有字段的内容,在 VS Code 中调试 Node 应用程序?

这应该是一些基本的东西,但不知何故似乎不可能......

如果不可能,有哪些变通方法?

我正在使用:

  • 节点15.3.0
  • VS 代码1.51.1

【问题讨论】:

    标签: javascript node.js debugging visual-studio-code encapsulation


    【解决方案1】:

    更新:

    在提出这个问题时,VS Code 的内置 javascript 调试器不支持调试私有类字段。从 1.56.0 版(2021 年 4 月)开始,现在可以了。


    旧答案:

    VS Code 的内置 javascript 调试器 (ms-vscode.js-debug) 尚不支持私有类字段。 (在 github 上有一个feature request

    但是,v8 确实有一个(目前处于实验状态)method for reading private class fields。我制作了一个概念验证项目 (leonardoraele/private-field-inspect),它使用 Node 的 inspector API 在运行时以编程方式打开调试会话以读取变量的内容。 (这不会中断运行时执行)

    它可以工作,但使用few caveats

    用法:

    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];
            // ...
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2017-06-24
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2017-04-25
    • 2018-07-22
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多