4d0360aa84
This change extends v8_debug_helper to export a new method that returns a list of all known heap object types. Why? We can substantially improve the user experience in our work-in- progress WinDbg extension if we register handlers not only for v8::internal::Object but for every specific HeapObject type. This has two benefits: - You save a click: if you're expanding a local variable of a more specific type than Object, you can see properties immediately rather than first needing to expand a sub-item that casts the variable to Object. - You retain the type hint: GetObjectProperties accepts a type hint string, and it's super important to pass it when working in a crash dump because the object's Map is probably inaccessible. If we have to cast to Object first, we lose this data. Bug: v8:9376 Change-Id: I4d635a1826574a3d08ac657e848e1fe7b83849fe Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1822859 Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Cr-Commit-Position: refs/heads/master@{#64331}
109 lines
2.4 KiB
Plaintext
109 lines
2.4 KiB
Plaintext
# Copyright 2019 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import("../../gni/snapshot_toolchain.gni")
|
|
import("../../gni/v8.gni")
|
|
|
|
config("internal_config") {
|
|
visibility = [ ":*" ] # Only targets in this file can depend on this.
|
|
|
|
if (is_component_build) {
|
|
defines = [ "BUILDING_V8_DEBUG_HELPER" ]
|
|
}
|
|
|
|
include_dirs = [
|
|
".",
|
|
"../..",
|
|
"$target_gen_dir",
|
|
"$target_gen_dir/../..",
|
|
]
|
|
}
|
|
|
|
# This config should be applied to code using v8_debug_helper.
|
|
config("external_config") {
|
|
if (is_component_build) {
|
|
defines = [ "USING_V8_DEBUG_HELPER" ]
|
|
}
|
|
include_dirs = [ "." ]
|
|
}
|
|
|
|
action("run_mkgrokdump") {
|
|
testonly = true
|
|
visibility = [ ":*" ]
|
|
|
|
deps = [
|
|
"../../test/mkgrokdump:mkgrokdump($v8_generator_toolchain)",
|
|
]
|
|
|
|
script = "../run.py"
|
|
|
|
outputs = [
|
|
"$target_gen_dir/v8heapconst.py",
|
|
]
|
|
|
|
args = [
|
|
"./" + rebase_path(
|
|
get_label_info(
|
|
"../../test/mkgrokdump:mkgrokdump($v8_generator_toolchain)",
|
|
"root_out_dir") + "/mkgrokdump",
|
|
root_build_dir),
|
|
"--outfile",
|
|
rebase_path("$target_gen_dir/v8heapconst.py", root_build_dir),
|
|
]
|
|
}
|
|
|
|
action("gen_heap_constants") {
|
|
testonly = true
|
|
visibility = [ ":*" ]
|
|
deps = [
|
|
":run_mkgrokdump",
|
|
]
|
|
script = "gen-heap-constants.py"
|
|
outputs = [
|
|
"$target_gen_dir/heap-constants-gen.cc",
|
|
]
|
|
args = [
|
|
rebase_path(target_gen_dir, root_build_dir),
|
|
rebase_path("$target_gen_dir/heap-constants-gen.cc", root_build_dir),
|
|
]
|
|
}
|
|
|
|
v8_component("v8_debug_helper") {
|
|
testonly = true
|
|
|
|
public = [
|
|
"debug-helper.h",
|
|
]
|
|
|
|
sources = [
|
|
"$target_gen_dir/../../torque-generated/class-debug-readers-tq.cc",
|
|
"$target_gen_dir/../../torque-generated/class-debug-readers-tq.h",
|
|
"$target_gen_dir/heap-constants-gen.cc",
|
|
"debug-helper-internal.cc",
|
|
"debug-helper-internal.h",
|
|
"debug-helper.h",
|
|
"get-object-properties.cc",
|
|
"heap-constants.cc",
|
|
"heap-constants.h",
|
|
"list-object-classes.cc",
|
|
]
|
|
|
|
deps = [
|
|
":gen_heap_constants",
|
|
"../..:run_torque",
|
|
"../..:v8_headers",
|
|
"../..:v8_libbase",
|
|
]
|
|
|
|
configs = [ ":internal_config" ]
|
|
if (v8_enable_i18n_support) {
|
|
configs += [ "//third_party/icu:icu_config" ]
|
|
}
|
|
|
|
remove_configs = [ "//build/config/compiler:no_rtti" ]
|
|
configs += [ "//build/config/compiler:rtti" ]
|
|
|
|
public_configs = [ ":external_config" ]
|
|
}
|