607ad422be
Background: In order to show custom content in the "Locals" pane in WinDbg, v8windbg replaces the getter function for a built-in debug model property named "Debugger.Models.StackFrame.LocalVariables". This is the property that the debugger fetches when determining what to display in "Locals". The new implementation of that getter, V8LocalVariables::GetValue, can either call the original getter (so that WinDbg displays the usual content for normal C++ frames) or produce a custom result (for builtins and JIT-compiled JS frames). The current problem: In new builds of WinDbg, users of v8windbg no longer see any content in the Locals pane for stack frames that correspond to builtins or JIT-compiled code. This is because of a behavior change in WinDbg: previously, attempting to get Debugger.Models.StackFrame.LocalVariables would eagerly attempt to find the symbols for the frame and return an error code if symbols were not found, but now it returns a lazy object which does not perform symbol lookup until you iterate its properties. V8LocalVariables::GetValue currently starts with an early-exit path based on checking whether the original getter succeeded, so the new lazy implementation causes us to always take that early exit. Proposed fix: Rather than relying on the return value from the original getter, which is not guaranteed to work consistently, we can base our decisions on the instruction pointer. If it points outside any module, or if it points to within a function in the module containing V8 whose name starts with "Builtins_", then we can build a custom result for the Locals pane. Change-Id: I6644071d5d83a25b964d9f4018265532528cc85c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3759228 Reviewed-by: Maya Lekova <mslekova@chromium.org> Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Cr-Commit-Position: refs/heads/main@{#81856} |
||
---|---|---|
.github | ||
bazel | ||
build_overrides | ||
custom_deps | ||
docs | ||
gni | ||
include | ||
infra | ||
samples | ||
src | ||
test | ||
testing | ||
third_party | ||
tools | ||
.bazelrc | ||
.clang-format | ||
.clang-tidy | ||
.editorconfig | ||
.flake8 | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.mailmap | ||
.style.yapf | ||
.vpython | ||
.vpython3 | ||
.ycm_extra_conf.py | ||
AUTHORS | ||
BUILD.bazel | ||
BUILD.gn | ||
CODE_OF_CONDUCT.md | ||
codereview.settings | ||
COMMON_OWNERS | ||
DEPS | ||
DIR_METADATA | ||
ENG_REVIEW_OWNERS | ||
INFRA_OWNERS | ||
INTL_OWNERS | ||
LICENSE | ||
LICENSE.fdlibm | ||
LICENSE.strongtalk | ||
LICENSE.v8 | ||
LOONG_OWNERS | ||
MIPS_OWNERS | ||
OWNERS | ||
PPC_OWNERS | ||
PRESUBMIT.py | ||
README.md | ||
RISCV_OWNERS | ||
S390_OWNERS | ||
WATCHLISTS | ||
WORKSPACE |
V8 JavaScript Engine
V8 is Google's open source JavaScript engine.
V8 implements ECMAScript as specified in ECMA-262.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 can run standalone, or can be embedded into any C++ application.
V8 Project page: https://v8.dev/docs
Getting the Code
Checkout depot tools, and run
fetch v8
This will checkout V8 into the directory v8
and fetch all of its dependencies.
To stay up to date, run
git pull origin
gclient sync
For fetching all branches, add the following into your remote
configuration in .git/config
:
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
fetch = +refs/tags/*:refs/tags/*
Contributing
Please follow the instructions mentioned at v8.dev/docs/contribute.