123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // Copyright (c) 2012 The Chromium 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 BASE_DEBUG_CRASH_LOGGING_H_
- #define BASE_DEBUG_CRASH_LOGGING_H_
- #include <stddef.h>
- #include <memory>
- #include "base/base_export.h"
- #include "base/macros.h"
- #include "base/strings/string_piece.h"
- namespace base {
- namespace debug {
- // A crash key is an annotation that is carried along with a crash report, to
- // provide additional debugging information beyond a stack trace. Crash keys
- // have a name and a string value.
- //
- // The preferred API is //components/crash/core/common:crash_key, however not
- // all clients can hold a direct dependency on that target. The API provided
- // in this file indirects the dependency.
- //
- // Example usage:
- // static CrashKeyString* crash_key =
- // AllocateCrashKeyString("name", CrashKeySize::Size32);
- // SetCrashKeyString(crash_key, "value");
- // ClearCrashKeyString(crash_key);
- // The maximum length for a crash key's value must be one of the following
- // pre-determined values.
- enum class CrashKeySize {
- Size32 = 32,
- Size64 = 64,
- Size256 = 256,
- };
- struct CrashKeyString;
- // Allocates a new crash key with the specified |name| with storage for a
- // value up to length |size|. This will return null if the crash key system is
- // not initialized.
- BASE_EXPORT CrashKeyString* AllocateCrashKeyString(const char name[],
- CrashKeySize size);
- // Stores |value| into the specified |crash_key|. The |crash_key| may be null
- // if AllocateCrashKeyString() returned null. If |value| is longer than the
- // size with which the key was allocated, it will be truncated.
- BASE_EXPORT void SetCrashKeyString(CrashKeyString* crash_key,
- base::StringPiece value);
- // Clears any value that was stored in |crash_key|. The |crash_key| may be
- // null.
- BASE_EXPORT void ClearCrashKeyString(CrashKeyString* crash_key);
- // A scoper that sets the specified key to value for the lifetime of the
- // object, and clears it on destruction.
- class BASE_EXPORT ScopedCrashKeyString {
- public:
- ScopedCrashKeyString(CrashKeyString* crash_key, base::StringPiece value);
- ~ScopedCrashKeyString();
- private:
- CrashKeyString* const crash_key_;
- DISALLOW_COPY_AND_ASSIGN(ScopedCrashKeyString);
- };
- ////////////////////////////////////////////////////////////////////////////////
- // The following declarations are used to initialize the crash key system
- // in //base by providing implementations for the above functions.
- // The virtual interface that provides the implementation for the crash key
- // API. This is implemented by a higher-layer component, and the instance is
- // set using the function below.
- class CrashKeyImplementation {
- public:
- virtual ~CrashKeyImplementation() = default;
- virtual CrashKeyString* Allocate(const char name[], CrashKeySize size) = 0;
- virtual void Set(CrashKeyString* crash_key, base::StringPiece value) = 0;
- virtual void Clear(CrashKeyString* crash_key) = 0;
- };
- // Initializes the crash key system in base by replacing the existing
- // implementation, if it exists, with |impl|. The |impl| is copied into base.
- BASE_EXPORT void SetCrashKeyImplementation(
- std::unique_ptr<CrashKeyImplementation> impl);
- // The base structure for a crash key, storing the allocation metadata.
- struct CrashKeyString {
- constexpr CrashKeyString(const char name[], CrashKeySize size)
- : name(name), size(size) {}
- const char* const name;
- const CrashKeySize size;
- };
- } // namespace debug
- } // namespace base
- #endif // BASE_DEBUG_CRASH_LOGGING_H_
|