v8/tools
Benedikt Meurer 3eb6b7aca6 [debug] Hold on to promises weakly from the debugger's promise stack.
The debugger maintains a stack of promises used for catch prediction
with promise builtins and async functions. Previously this stack would
hold on to the individual promises strongly, and subtle bugs that lead
to not properly cleaning up the stack in some corner cases would often
lead to significant memory issues (e.g. leaking whole iframes).

This refactors the PromiseOnStack to be

  (a) on the V8 heap, rather than allocating C++ structs with global
      handles pointing to the promises, and
  (b) hold on to the promises only weakly.

While this will not guarantee proper promise stack management, it will
at least ensure that edge cases don't lead to catastrophic (debugger
only) leaks.

Bug: chromium:1292063
Change-Id: I9c293ca2032de3a59e1e9624f132d37187805567
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3545176
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Reviewed-by: Simon Zünd <szuend@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79594}
2022-03-24 08:16:32 +00:00
..
bazel [bazel] Add optional deps for prebuilt bazel for bots 2021-06-22 08:42:15 +00:00
cfi
clusterfuzz [fuzzing] Re-enable fuzzing for staged harmony features 2022-03-14 16:06:04 +00:00
cppgc Reland "Reland "Reland "cppgc: Enable checks for assignments in prefinalizers""" 2021-09-29 16:02:17 +00:00
debug_helper [heap] Add flag for disabling map space 2022-02-18 09:03:07 +00:00
dev [tools] Allow python3 for gm.py 2022-02-16 09:42:13 +00:00
gcmole [tools][gcmole] Rename suspects.whitelist to suspects.allowlist 2022-03-21 10:24:39 +00:00
generate_shim_headers
heap-layout [tool] fix typo in heap-layout and system-analyzer 2022-01-11 13:06:21 +00:00
heap-stats [tools] Improve heap stats tool documentation 2022-02-03 15:53:04 +00:00
ignition
js [tools][system-analyzer] Speed improvements 2022-03-21 10:22:25 +00:00
jsfunfuzz
link_clicker.extension
mb [infra] migrate simple PRESUBMIT scripts to py3 2022-02-18 13:43:30 +00:00
memory
msan Rename msan blacklist.txt to ignorelist.txt 2021-05-27 08:24:50 +00:00
perf
profview [tools] Profiler builtins and sparkplug fixes 2021-04-21 11:44:31 +00:00
release Remove deprecated scripts in V8 2022-03-15 15:00:51 +00:00
sanitizers Reland "[heap] Optimize time to reach global safepoint" 2022-01-12 10:35:25 +00:00
snapshot
system-analyzer [tools][system-analyzer] Speed improvements 2022-03-21 10:22:25 +00:00
testrunner [maglev] Create test variant 2022-03-23 10:12:52 +00:00
toolchain
torque [tools] Clean up Py2 code 2022-03-17 09:05:27 +00:00
tracing/proto-converter [tools] Refactor, use built-in Array.flat() instead of custom flatten method 2021-05-31 07:46:15 +00:00
turbolizer Fix looping edges 2022-03-23 11:48:41 +00:00
ubsan [respect] Rename UBSAN's blacklists to ignorelists 2021-04-28 07:55:39 +00:00
unittests Revert "[tools] Clean up py2 code" 2022-03-17 10:07:38 +00:00
v8.xcodeproj
v8windbg Remove absolute paths in ninja files for v8windbg gn file 2021-12-13 16:22:54 +00:00
valgrind/asan
vim [vim] Update vim scripts 2021-04-01 16:14:04 +00:00
visual_studio
wasm [wasm] Tweak constants for estimating code space size 2022-03-15 14:41:13 +00:00
wasm-compilation-hints
zone-stats
__init__.py
adb-d8.py
android-build.sh
android-ll-prof.sh
android-run.py
android-sync.sh
arguments.mjs [tools] Cleanup Arguments processing in tools 2021-06-01 09:43:46 +00:00
avg.py
bash-completion.sh [bash-completion] Support some gm.py completion 2021-03-24 16:24:25 +00:00
bigint-tester.py
BUILD.gn [tools] Improve gcmole part I: command line 2022-03-03 15:01:15 +00:00
callstats_groups.py [web snapshot] web snapshot <3 RuntimeCallStats 2021-05-19 12:16:28 +00:00
callstats-from-telemetry.sh [tools] Fix callstats 2022-02-17 19:12:24 +00:00
callstats.html [tools] Fix callstats 2022-02-17 19:12:24 +00:00
callstats.py [tools] Fix callstats 2022-02-17 19:12:24 +00:00
callstats.py.vpython
check-inline-includes.sh
check-static-initializers.sh Bump expected static initializers count from 2 to 3 2021-02-12 09:47:44 +00:00
check-unused-bailouts.sh
check-unused-symbols.sh
codemap.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
collect_deprecation_stats.sh
compare_torque_output.py [v8] Migrate compare_torque_output to py3 2022-02-08 15:46:11 +00:00
compare-table-gen.js
consarray.mjs [tools] Migrate more tools to ES6 classes 2021-01-11 16:40:39 +00:00
cpu.sh
cross_build_gcc.sh
csvparser.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
DEPS
detect-builtins.js
disasm.py
draw_instruction_graph.sh
dump-cpp.py
dumpcpp-driver.mjs [tools][system-analyzer] Add local symbol server 2021-07-01 09:59:17 +00:00
dumpcpp.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
eval_gc_nvp.py
eval_gc_time.sh Remove all leftovers of store buffer 2021-11-10 09:29:41 +00:00
find_depot_tools.py
find-builtin [tools] Add a tool for finding builtins 2021-04-07 12:51:38 +00:00
find-commit-for-patch.py
freebsd-tick-processor
fuzz-harness.sh
gc_nvp_common.py
gc-nvp-to-csv.py
gc-nvp-trace-processor.py
gdb-v8-support.py [tools] Fix gdb redirect helper in gdb-v8-support.py 2021-10-21 12:27:45 +00:00
gdbinit [gdbinit] Also look for OS::DebugBreak frames 2022-01-04 15:51:18 +00:00
gen-inlining-tests.py
gen-keywords-gen-h.py Fix gen-keywords-gen-h.py 2022-01-03 16:38:27 +00:00
gen-postmortem-metadata.py [maglev] Use RegList for free registers 2022-03-03 10:33:44 +00:00
gen-v8-gn.py [Py3] fix py3 issue in tools 2021-01-25 15:33:53 +00:00
generate-builtins-tests.py
generate-header-include-checks.py Skip src/maglev for v8_check_header_includes 2022-02-28 10:54:50 +00:00
generate-runtime-call-stats.py
generate-ten-powers.scm
get_landmines.py
grokdump.py [tools] Add basic pointer compression to grokdump 2022-02-04 14:35:26 +00:00
ic-processor
ic-processor-driver.mjs [tools][system-analyzer] Add local symbol server 2021-07-01 09:59:17 +00:00
index.html [tools] Remove html-version of the tickprocessor 2022-02-18 16:25:37 +00:00
linux-tick-processor
ll_prof.py
lldb_commands.py [tools] Set up source map for lldb 2021-07-01 18:04:17 +00:00
locs.py
logreader.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
mac-nm
mac-tick-processor
Makefile.tags
objdump-v8
OWNERS [owners] Includes infra team as tools owners 2021-11-25 07:55:08 +00:00
package-lock.json [tools] Add README.md file and package.json for local development 2021-07-05 16:43:28 +00:00
package.json [tools] Add README.md file and package.json for local development 2021-07-05 16:43:28 +00:00
parse-processor
parse-processor-driver.mjs [tools][system-analyzer] Add local symbol server 2021-07-01 09:59:17 +00:00
parse-processor.html [tools] Prepare parse-processor for baseline compiler 2021-02-22 10:51:00 +00:00
parse-processor.mjs [tools] Cleanup Arguments processing in tools 2021-06-01 09:43:46 +00:00
perf-compare.py
predictable_wrapper.py [v8] py3 migration of tools/predictable_wrapper.py 2022-02-22 09:48:35 +00:00
PRESUBMIT.py Revert "[tools] Clean up py2 code" 2022-03-17 10:07:38 +00:00
process-wasm-compilation-times.py [wasm] Tweak constants for estimating code space size 2022-03-15 14:41:13 +00:00
profile_view.js
profile_view.mjs
profile.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
README.md [tools] Add README.md file and package.json for local development 2021-07-05 16:43:28 +00:00
regexp-sequences.py
run_perf.py [run_perf] Replace usage of numpy with python3 statistics package 2022-02-09 14:12:13 +00:00
run-clang-tidy.py
run-llprof.sh
run-num-fuzzer.py
run-perf.sh
run-tests.py
run-wasm-api-tests.py
run.py
shell-utils.h
sourcemap.mjs [system-analyzer] Add source map support 2021-06-22 14:11:03 +00:00
splaytree.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
stats-viewer.py
test262-results-parser.js
tickprocessor-driver.mjs [tools][system-analyzer] Add local symbol server 2021-07-01 09:59:17 +00:00
tickprocessor.mjs [tools] Improve system analyzer 2022-03-02 13:41:32 +00:00
try_perf.py [v8_perf] remove deprecated builder options from v8 perf trybot 2021-12-02 11:02:32 +00:00
turbolizer-perf.py
update-object-macros-undef.py
v8_presubmit.py Revert "[tools] Clean up py2 code" 2022-03-17 10:07:38 +00:00
v8heapconst.py [debug] Hold on to promises weakly from the debugger's promise stack. 2022-03-24 08:16:32 +00:00
whitespace.txt Revert "Whitespace change to test alerts" 2021-11-02 12:51:13 +00:00
windbg.js
windows-tick-processor.bat [tools] Use .mjs in windows-tick-processor.bat 2021-01-07 09:00:23 +00:00
wpr.wprp Step 1 (of 3-ish): Basic ETW Instrumentation in V8 2021-01-05 20:11:03 +00:00

TOOLS

This directory contains debugging and investigation tools for V8.

The contents are regularly mirrored to http://v8.dev/tools.

Local Development

For local development you have to start a local webserver under http://localhost:8000:

  cd tools/;
  npm install;
  ws;

Local Symbol Server

The system-analyzer can symbolize profiles for local binaries by running a local symbol server

  cd tools/;
  ws --stack system-analyzer/lws-middleware.js lws-static cors;

Note that the local symbol server will run nm and objdump and has access to your files.