Javascript 将EventEmitter单步切换到调试器中的侦听器
Node有一个类,Javascript 将EventEmitter单步切换到调试器中的侦听器,javascript,node.js,debugging,electron,Javascript,Node.js,Debugging,Electron,Node有一个类,EventEmitter,它是Node.js和electron编程的一个非常常见的工具。不幸的是,这是一个需要调试的PITA。想象一下这样的代码 import EventEmitter from `events`; const emitter = new EventEmitter(); emitter.on('foobar', handleFoobar); emitter.emit('foobar', 'foo', 'bar'); function handleFoob
EventEmitter
,它是Node.js和electron编程的一个非常常见的工具。不幸的是,这是一个需要调试的PITA。想象一下这样的代码
import EventEmitter from `events`;
const emitter = new EventEmitter();
emitter.on('foobar', handleFoobar);
emitter.emit('foobar', 'foo', 'bar');
function handleFoobar(..args) {
console.log(...args);
}
现在我想在调试器中逐步完成代码。当然,在这个小示例中,我可以在handleFoobar
上设置一个断点,但在实际代码中,我只希望在到达someEmitter.emit时,能够逐步完成代码。我希望能够按照“进入侦听器”的思路选择一些内容
不幸的是,目前还不存在这样的功能。因此,要想让听众了解情况,需要进行大约20-25次的干预。您可以在所有出口点设置断点,但至少有6个断点,当您想全部打开/关闭它们时,这也很烦人
当使用someEmitter.emit
行时,是否有其他创造性的解决方案可以有效地实现类似“步入监听器”的功能
想到一个解决方案,就是用一个更简单的实现来替换events.js
。如果没有域支持和使用ES6功能,它可能会像
EventEmitter.prototype.emit(type, ...args) {
const listeners = this._listeners[type].slice();
listeners.forEach(listener => {
listener(...args);
}
return listeners > 0;
}
如果process.env.NODE\u env==“development”
还有其他更通用的解决方案吗?就像一个调试器功能,我可以选择不直接进入的代码,但在调试器中选择进入的步骤来自它的退出点?我找到了解决方案。这叫黑锁
您可以通过脚本文件名设置哪些文件不需要进入,因此,将events.js
添加到列表中正是我想要的。当我在someEmitter.emit
上时,我按下“跨入”键,我会立即走出监听器!