将EventEmitter移到debugging器中的侦听器

Node有一个类EventEmitter ,它是node.js和电子编程的一个非常常见的东西。 不幸的是,它是一个PITA来debugging。 想象一下这样的代码

 import EventEmitter from `events`; const emitter = new EventEmitter(); emitter.on('foobar', handleFoobar); emitter.emit('foobar', 'foo', 'bar'); function handleFoobar(..args) { console.log(...args); } 

现在我想在debugging器中逐步完成代码。 当然,在这个小例子中,我可以在handleFoobar上放置一个断点,但是在真正的代码中,我只是希望能够遍历代码,当我得到一些someEmitter.emit我希望能够沿着“步入听众“

不幸的是没有这样的function存在AFAIK。 EventEmitter的实现相当复杂,因此join到听众需要步进约20-25次。 你可以在所有的出口点设置断点,但是至less有6个断点,当你想把它们全部打开/closures的时候也是很烦人的。

在这里输入图像说明

有没有其他创造性的解决scheme来有效地实现像“步入监听器”的东西,当someEmitter.emit线?

想到一个解决scheme就是用简单的实现来replaceevents.js 。 没有域支持和使用ES6function,它可能是更小的实现像

 EventEmitter.prototype.emit(type, ...args) { const listeners = this._listeners[type].slice(); listeners.forEach(listener => { listener(...args); } return listeners > 0; } 

我想我也可以修补到原型如果process.env.NODE_ENV === 'development'

还有其他更通用的解决scheme吗? 就像也许是一个debugging器function,我可以select代码,永远不会直接进入,但在debugging器中select进入它的出口点?

我find了解决scheme。 这就是所谓的黑屏

您可以通过脚本文件名来设置哪些文件不会进入,所以添加events.js到列表正是我想要的。 当我在someEmitter.emit ,然后按下“Step Into”,我立即走出听众! 💕💞💗😍💗💞💕

在这里输入图像说明