gpt4 book ai didi

javascript - 如何使用 VS Code 调试 Node.js 中的私有(private)类字段?

转载 作者:行者123 更新时间:2023-12-04 15:10:53 24 4
gpt4 key购买 nike

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

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

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

我正在使用:

  • Node 15.3.0
  • VS 代码 1.51.1

最佳答案

更新:

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


旧答案:

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

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

有效,但带有 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' }

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

示例:

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

关于javascript - 如何使用 VS Code 调试 Node.js 中的私有(private)类字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65227239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com