Hi, I work on Node.js code coverage tools using V8's profiler (c8). There are currently 2 methods to use the V8 debug protocol from Node. 1. You can spawn a process with the `--inspect` or `--inspect-brk` flag. This starts V8 in "server mode" and remote clients can connect to it and interact with the debugger. 2. You can use Node's "inspector" module to enable a process to debug itself (communicate with its own V8)
This means to profile a V8 runtime, you need to first start the V8 process and then connect the inspector to it. This system causes a mismatch with the needs of coverage. nyc (istanbul) and c8 want to get coverage for all the node processes spawned in a process sub-tree. We have a single top process collecting coverage and each Node subprocess reports its results to it. This means that we have the opposite system: the inspector is started first, and then many debugged processes connect to it. But this is not supported by V8. So we use a "brutal hack" called "spawn-wrap". It intercepts all the Node processes created in a subtree and replaces its main module by another one. This wrapper module has the logic to start the profiler, execute the original entry point and then report the results. This solution is far from optimal. The wrapping mechanism is complex and hard to maintain, if the entry point forces the process to close immediately the reporting code is not executed, and the execution of the wrapper entry-point can interfere with the the coverage. Some of these issues can be solved, but the mismatch remains: we have to engineer a level on top of the V8 debugger because the connection can only go in one direction currently: the inspector connects to the debugger. I would like to know what it would take to support the opposite scenario: start an inspector server on some port (ex 9333) and then ask the debugger to initiate the connection. It would act like: inspectorServer.on("connection", (client) => {console.log("New connection" );}) await inspectorServer.start(); spawn("node", ["foo.js"], {env: {NODE_OPTIONS="--inspect-srv=9333"}}); Ensuring that all the subprocesses have the same env var or flag is easier to achieve than hijacking the entry-point to emulate this kind of feature. I believe that this kind of feature needs to be implemented in V8. Am I right? Should I redirect this feature request to Node? Is it the right place to post this message? -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.