• Seth Brenith's avatar
    Fix v8windbg Locals pane behavior · 607ad422
    Seth Brenith authored
    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/+/3759228Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
    Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
    Cr-Commit-Position: refs/heads/main@{#81856}
    607ad422
Name
Last commit
Last update
..
bazel Loading commit data...
cfi Loading commit data...
clusterfuzz Loading commit data...
cppgc Loading commit data...
debug_helper Loading commit data...
dev Loading commit data...
gcmole Loading commit data...
generate_shim_headers Loading commit data...
heap-layout Loading commit data...
heap-stats Loading commit data...
js Loading commit data...
jsfunfuzz Loading commit data...
link_clicker.extension Loading commit data...
mb Loading commit data...
memory Loading commit data...
msan Loading commit data...
perf Loading commit data...
profiling Loading commit data...
profview Loading commit data...
release Loading commit data...
sanitizers Loading commit data...
snapshot Loading commit data...
system-analyzer Loading commit data...
testrunner Loading commit data...
toolchain Loading commit data...
torque Loading commit data...
tracing/proto-converter Loading commit data...
turbolizer Loading commit data...
ubsan Loading commit data...
unittests Loading commit data...
v8.xcodeproj Loading commit data...
v8windbg Loading commit data...
valgrind/asan Loading commit data...
vim Loading commit data...
visual_studio Loading commit data...
wasm Loading commit data...
wasm-compilation-hints Loading commit data...
zone-stats Loading commit data...
BUILD.gn Loading commit data...
DEPS Loading commit data...
Makefile.tags Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
__init__.py Loading commit data...
adb-d8.py Loading commit data...
android-build.sh Loading commit data...
android-run.py Loading commit data...
android-sync.sh Loading commit data...
arguments.mjs Loading commit data...
avg.py Loading commit data...
bash-completion.sh Loading commit data...
bigint-tester.py Loading commit data...
callstats-from-telemetry.sh Loading commit data...
callstats.html Loading commit data...
callstats.py Loading commit data...
callstats.py.vpython Loading commit data...
callstats_groups.py Loading commit data...
check-inline-includes.sh Loading commit data...
check-static-initializers.sh Loading commit data...
check-unused-bailouts.sh Loading commit data...
check-unused-symbols.sh Loading commit data...
codemap.mjs Loading commit data...
collect_deprecation_stats.sh Loading commit data...
combine_hints.py Loading commit data...
compare-table-gen.js Loading commit data...
compare_torque_output.py Loading commit data...
consarray.mjs Loading commit data...
cpu.sh Loading commit data...
cross_build_gcc.sh Loading commit data...
csvparser.mjs Loading commit data...
detect-builtins.js Loading commit data...
disasm.py Loading commit data...
draw_instruction_graph.sh Loading commit data...
dump-cpp.py Loading commit data...
dumpcpp-driver.mjs Loading commit data...
dumpcpp.mjs Loading commit data...
eval_gc_nvp.py Loading commit data...
eval_gc_time.sh Loading commit data...
find-builtin Loading commit data...
find-commit-for-patch.py Loading commit data...
find_depot_tools.py Loading commit data...
freebsd-tick-processor Loading commit data...
fuzz-harness.sh Loading commit data...
gc-nvp-to-csv.py Loading commit data...
gc-nvp-trace-processor.py Loading commit data...
gc_nvp_common.py Loading commit data...
gdb-v8-support.py Loading commit data...
gdbinit Loading commit data...
gen-inlining-tests.py Loading commit data...
gen-keywords-gen-h.py Loading commit data...
gen-postmortem-metadata.py Loading commit data...
gen-v8-gn.py Loading commit data...
generate-builtins-tests.py Loading commit data...
generate-header-include-checks.py Loading commit data...
generate-runtime-call-stats.py Loading commit data...
generate-ten-powers.scm Loading commit data...
get_hints.py Loading commit data...
get_landmines.py Loading commit data...
grokdump.py Loading commit data...
ic-processor Loading commit data...
ic-processor-driver.mjs Loading commit data...
index.html Loading commit data...
linux-tick-processor Loading commit data...
lldb_commands.py Loading commit data...
locs.py Loading commit data...
logreader.mjs Loading commit data...
mac-nm Loading commit data...
mac-tick-processor Loading commit data...
objdump-v8 Loading commit data...
package-lock.json Loading commit data...
package.json Loading commit data...
parse-processor Loading commit data...
parse-processor-driver.mjs Loading commit data...
parse-processor.html Loading commit data...
parse-processor.mjs Loading commit data...
perf-compare.py Loading commit data...
predictable_wrapper.py Loading commit data...
process-wasm-compilation-times.py Loading commit data...
profile.mjs Loading commit data...
profile_view.js Loading commit data...
profile_view.mjs Loading commit data...
regexp-sequences.py Loading commit data...
run-clang-tidy.py Loading commit data...
run-num-fuzzer.py Loading commit data...
run-tests.py Loading commit data...
run-wasm-api-tests.py Loading commit data...
run.py Loading commit data...
run_perf.py Loading commit data...
shell-utils.h Loading commit data...
sourcemap.mjs Loading commit data...
splaytree.mjs Loading commit data...
stats-viewer.py Loading commit data...
test262-results-parser.js Loading commit data...
tickprocessor-driver.mjs Loading commit data...
tickprocessor.mjs Loading commit data...
try_perf.py Loading commit data...
turbolizer-perf.py Loading commit data...
update-object-macros-undef.py Loading commit data...
v8_presubmit.py Loading commit data...
v8heapconst.py Loading commit data...
whitespace.txt Loading commit data...
windbg.js Loading commit data...
windows-tick-processor.bat Loading commit data...
wpr.wprp Loading commit data...