Javascript 将EventEmitter单步切换到调试器中的侦听器

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

Node有一个类,
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
上时,我按下“跨入”键,我会立即走出监听器!