为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 VS Code 调试 Node.js 中的私有类字段?

如何使用 VS Code 调试 Node.js 中的私有类字段?

小唯快跑啊 2023-11-02 16:53:33
如何在运行时检查类实例私有字段的内容,在 VS Code 中调试 Node 应用程序?这应该是一些基本的东西,但不知何故似乎不可能......VS Code 的 Javascript 调试器不显示对象的私有字段我尝试过util.inspect,但 Node 人员决定不让它工作。如果不可能,有哪些解决方法?我在用着:节点15.3.0VS代码1.51.1
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

更新:

在提出此问题时,VS Code 的内置 JavaScript 调试器不支持私有类字段的调试。从版本 1.56.0(2021 年 4 月)开始,现在是这样。


旧答案:

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];

        // ...

    }

}


查看完整回答
反对 回复 2023-11-02
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信