v8/tools/debug_helper/heap-constants.h
Seth Brenith 534482b35b [tools] Show contents of cached external strings from crash dumps
This change adds support for the postmortem inspection library to show
the content of cached external strings if that content is available. It
also fixes a minor annoyance where strings with unavailable data would
show up as "...". Now, if fetching the very first character fails, we
omit the literal value from the output.

Bug: v8:9376
Change-Id: Id694a774c231ab3467fb59b1c149284729acfb20
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1987922
Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#65961}
2020-01-23 21:33:20 +00:00

68 lines
2.3 KiB
C++

// 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.
#ifndef V8_TOOLS_DEBUG_HELPER_HEAP_CONSTANTS_H_
#define V8_TOOLS_DEBUG_HELPER_HEAP_CONSTANTS_H_
#include <cstdint>
#include <string>
#include <vector>
#include "debug-helper.h"
#include "src/objects/instance-type.h"
namespace d = v8::debug_helper;
namespace v8_debug_helper_internal {
// ===== Functions generated by gen-heap-constants.py: =========================
// Returns the name of a known object, given its offset within the first page of
// the space, or empty string on failure.
std::string FindKnownObjectInOldSpace(uintptr_t offset);
std::string FindKnownObjectInReadOnlySpace(uintptr_t offset);
std::string FindKnownObjectInMapSpace(uintptr_t offset);
// In builds with pointer compression enabled, sets the *_first_page members in
// the HeapAddresses object. In other builds, does nothing.
void FillInUnknownHeapAddresses(d::HeapAddresses* heap_addresses,
uintptr_t any_uncompressed_ptr);
// Returns the instance type for the known Map, given its offset within the
// first page of the space, or empty string on failure.
int FindKnownMapInstanceTypeInMapSpace(uintptr_t offset);
int FindKnownMapInstanceTypeInReadOnlySpace(uintptr_t offset);
// ===== End of generated functions. ===========================================
// Returns a descriptive string if the given address matches a known object, or
// an empty string otherwise.
std::string FindKnownObject(uintptr_t address,
const d::HeapAddresses& heap_addresses);
struct KnownInstanceType {
enum class Confidence {
kLow,
kHigh,
};
KnownInstanceType() : confidence(Confidence::kLow) {}
KnownInstanceType(int type) : KnownInstanceType() {
if (type >= 0) {
confidence = Confidence::kHigh;
types.push_back(static_cast<v8::internal::InstanceType>(type));
}
}
Confidence confidence;
std::vector<v8::internal::InstanceType> types;
};
// Returns information about the instance type of the Map at the given address,
// based on the list of known Maps.
KnownInstanceType FindKnownMapInstanceTypes(
uintptr_t address, const d::HeapAddresses& heap_addresses);
} // namespace v8_debug_helper_internal
#endif