|  | // 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 <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/base_export.h" | 
|  | #include "base/basictypes.h" | 
|  | #include "base/strings/string_piece.h" | 
|  |  | 
|  | // These functions add metadata to the upload payload when sending crash reports | 
|  | // to the crash server. | 
|  | // | 
|  | // IMPORTANT: On OS X and Linux, the key/value pairs are only sent as part of | 
|  | // the upload and are not included in the minidump! | 
|  |  | 
|  | namespace base { | 
|  | namespace debug { | 
|  |  | 
|  | class StackTrace; | 
|  |  | 
|  | // Set or clear a specific key-value pair from the crash metadata. Keys and | 
|  | // values are terminated at the null byte. | 
|  | BASE_EXPORT void SetCrashKeyValue(const base::StringPiece& key, | 
|  | const base::StringPiece& value); | 
|  | BASE_EXPORT void ClearCrashKey(const base::StringPiece& key); | 
|  |  | 
|  | // Records the given StackTrace into a crash key. | 
|  | BASE_EXPORT void SetCrashKeyToStackTrace(const base::StringPiece& key, | 
|  | const StackTrace& trace); | 
|  |  | 
|  | // Formats |count| instruction pointers from |addresses| using %p and | 
|  | // sets the resulting string as a value for crash key |key|. A maximum of 23 | 
|  | // items will be encoded, since breakpad limits values to 255 bytes. | 
|  | BASE_EXPORT void SetCrashKeyFromAddresses(const base::StringPiece& key, | 
|  | const void* const* addresses, | 
|  | size_t count); | 
|  |  | 
|  | // A scoper that sets the specified key to value for the lifetime of the | 
|  | // object, and clears it on destruction. | 
|  | class BASE_EXPORT ScopedCrashKey { | 
|  | public: | 
|  | ScopedCrashKey(const base::StringPiece& key, const base::StringPiece& value); | 
|  | ~ScopedCrashKey(); | 
|  |  | 
|  | private: | 
|  | std::string key_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(ScopedCrashKey); | 
|  | }; | 
|  |  | 
|  | // Before setting values for a key, all the keys must be registered. | 
|  | struct BASE_EXPORT CrashKey { | 
|  | // The name of the crash key, used in the above functions. | 
|  | const char* key_name; | 
|  |  | 
|  | // The maximum length for a value. If the value is longer than this, it will | 
|  | // be truncated. If the value is larger than the |chunk_max_length| passed to | 
|  | // InitCrashKeys() but less than this value, it will be split into multiple | 
|  | // numbered chunks. | 
|  | size_t max_length; | 
|  | }; | 
|  |  | 
|  | // Before the crash key logging mechanism can be used, all crash keys must be | 
|  | // registered with this function. The function returns the amount of space | 
|  | // the crash reporting implementation should allocate space for the registered | 
|  | // crash keys. |chunk_max_length| is the maximum size that a value in a single | 
|  | // chunk can be. | 
|  | BASE_EXPORT size_t InitCrashKeys(const CrashKey* const keys, size_t count, | 
|  | size_t chunk_max_length); | 
|  |  | 
|  | // Returns the correspnding crash key object or NULL for a given key. | 
|  | BASE_EXPORT const CrashKey* LookupCrashKey(const base::StringPiece& key); | 
|  |  | 
|  | // In the platform crash reporting implementation, these functions set and | 
|  | // clear the NUL-termianted key-value pairs. | 
|  | typedef void (*SetCrashKeyValueFuncT)(const base::StringPiece&, | 
|  | const base::StringPiece&); | 
|  | typedef void (*ClearCrashKeyValueFuncT)(const base::StringPiece&); | 
|  |  | 
|  | // Sets the function pointers that are used to integrate with the platform- | 
|  | // specific crash reporting libraries. | 
|  | BASE_EXPORT void SetCrashKeyReportingFunctions( | 
|  | SetCrashKeyValueFuncT set_key_func, | 
|  | ClearCrashKeyValueFuncT clear_key_func); | 
|  |  | 
|  | // Helper function that breaks up a value according to the parameters | 
|  | // specified by the crash key object. | 
|  | BASE_EXPORT std::vector<std::string> ChunkCrashKeyValue( | 
|  | const CrashKey& crash_key, | 
|  | const base::StringPiece& value, | 
|  | size_t chunk_max_length); | 
|  |  | 
|  | // Resets the crash key system so it can be reinitialized. For testing only. | 
|  | BASE_EXPORT void ResetCrashLoggingForTesting(); | 
|  |  | 
|  | }  // namespace debug | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_DEBUG_CRASH_LOGGING_H_ |