以下是我正在使用的代码段。
'use strict';
const obj = { prop: null };
setTimeout(() => {
let localObj = obj;
debugger;
}, 3000);
process.on('exit', () => {
debugger;
});
debugger;
我在使用Jetbrains产品调试Node变量范围时遇到问题(这里是PhpStorm 2016)。
在回调上下文中使用第一个断点(setTimeout回调)obj
时,调试器监视器可以看到它:
在第二个断点(退出回调)obj
对调试器监视不可见。 obj
出现在 Closure (setTimeout回调范围)中,但不出现在 Local 中。
如果在回调函数中提到obj
,则调试器可以看到它。如果它出现在断点之前或之后的函数中并不重要。否则它会保持不可见,就像没有父功能范围一样。
这里的目标是在某些时候(退出或其他)不引人注意地观察本地模块变量(一次可能有十几个POI)。
我已经习惯了那些很酷的家伙使用调试器'。但是,如果应该在子范围中明确提到父范围变量以使调试器可见,我就无法理解这可能是什么样的更酷的'比
`process.on('exit', () => console.log(obj));`
导致此行为的原因是什么?这是Node和/或V8和/或Jetbrains调试器的已知限制吗?有更好的方法吗?