+yang who can say more about node.

We (Ben, Yang & myself) recently discussed the possibility of adding
coverage support to node itself. See here
<https://docs.google.com/document/d/1-BBdxe9_zIm9161_YQgKixL5mrM0rID9XuhcdDERYtA/edit?usp=sharing>
for a (very rough and early stage) doc with some thoughts.

On Wed, Aug 8, 2018 at 10:22 PM, demurgos <demurgos....@gmail.com> wrote:

> 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.

Reply via email to