nodejs / llnode

An lldb plugin for Node.js and V8, which enables inspection of JavaScript states for insights into Node.js processes and their core dumps.
Other
1.15k stars 99 forks source link

PSA: repository tracking V8 postmortem changes #340

Closed mmarchini closed 4 years ago

mmarchini commented 4 years ago

I created a repository to keep track of V8 postmortem metadata changes (https://github.com/mmarchini/llnode-v8-tester). The repository uses daily GitHub Actions to build d8 and will create an issue every time metadata changes are detected. In the future I hope to add some llnode integration tests there as well (run llnode test suite against the latest build of d8).

This is not intended to replace the postmortem tests we have on Node.js, so we should keep updating those as we introduce new metadata here.

mmarchini commented 4 years ago

cc @cjihrig as this might be of your interest

cjihrig commented 4 years ago

That's great. Thank you.

will create an issue every time metadata changes are detected

Just so I know where to watch... will the issues be created here, the llnode-v8-tester repo, or somewhere else?

mmarchini commented 4 years ago

On llnode-v8-tester. My idea is to use information from issues there to open issues here manually, after triaging which metadata change are relevant for llnode.

mmarchini commented 4 years ago

We could even improve the code on that repository to also print all symbols llnode is able to load from a d8 binary. If there are changes in this list between two versions, those changes will likely impact llnode.

This could be implemented on llnode as: 1) Keep a cache of all symbols successfully loaded 2) Expose a command (could be available only on debug) to run ::Load on all Constants classes and output that list

joyeecheung commented 4 years ago

I believe currently when LLNODE_DEBUG=true is set the constant loading failures can be grepped from stderr when the tests are run?

mmarchini commented 4 years ago

The problem with tests to detect metadata change is that they might not run every command (if a test step fail, for example), and ::Load is only called when needed (so some Constants classes would never be called).