繁体   English   中英

如何使用 VS 代码调试 Node.js 中的私有 class 字段?

[英]How can I debug private class fields in Node.js with VS Code?

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

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

如果不可能,有哪些解决方法?

我在用着:

  • 节点15.3.0
  • VS 代码1.51.1

更新:

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


老答案:

VS Code 的内置 javascript 调试器 ( ms-vscode.js-debug ) 尚不支持私有 class 字段。 (在 github 上有一个功能请求

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

它有效,但有 一些警告

用法:

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

Output:

{ publicValue: 'not so secret', '#secretValue': 'my secret' }

上面的解决方法对我来说并不令人满意,所以我认为最好避免使用私有 class 字段,直到调试器正确支持它们。 相反,使用符号来隐藏私有变量。

例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM