// Copyright (c) 2010, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // process_state_proto.proto: A client proto representation of a process, // in a fully-digested state. // // Derived from earlier struct and class based models of a client-side // processed minidump found under src/google_breakpad/processor. The // file process_state.h holds the top level representation of this model, // supported by additional classes. We've added a proto representation // to ease serialization and parsing for server-side storage of crash // reports processed on the client. // // Author: Jess Gray syntax = "proto2"; package google_breakpad; // A proto representation of a process, in a fully-digested state. // See src/google_breakpad/processor/process_state.h message ProcessStateProto { // Next value: 14 // The time-date stamp of the original minidump (time_t format) optional int64 time_date_stamp = 1; // The time-date stamp when the process was created (time_t format) optional int64 process_create_time = 13; message Crash { // The type of crash. OS- and possibly CPU- specific. For example, // "EXCEPTION_ACCESS_VIOLATION" (Windows), "EXC_BAD_ACCESS / // KERN_INVALID_ADDRESS" (Mac OS X), "SIGSEGV" (other Unix). required string reason = 1; // If crash_reason implicates memory, the memory address that caused the // crash. For data access errors, this will be the data address that // caused the fault. For code errors, this will be the address of the // instruction that caused the fault. required int64 address = 2; } optional Crash crash = 2; // If there was an assertion that was hit, a textual representation // of that assertion, possibly including the file and line at which // it occurred. optional string assertion = 3; // The index of the thread that requested a dump be written in the // threads vector. If a dump was produced as a result of a crash, this // will point to the thread that crashed. If the dump was produced as // by user code without crashing, and the dump contains extended Breakpad // information, this will point to the thread that requested the dump. optional int32 requesting_thread = 4; message Thread { // Stack for the given thread repeated StackFrame frames = 1; } // Stacks for each thread (except possibly the exception handler // thread) at the time of the crash. repeated Thread threads = 5; // The modules that were loaded into the process represented by the // ProcessState. repeated CodeModule modules = 6; // System Info: OS and CPU // A string identifying the operating system, such as "Windows NT", // "Mac OS X", or "Linux". If the information is present in the dump but // its value is unknown, this field will contain a numeric value. If // the information is not present in the dump, this field will be empty. optional string os = 7; // A short form of the os string, using lowercase letters and no spaces, // suitable for use in a filesystem. Possible values are "windows", // "mac", and "linux". Empty if the information is not present in the dump // or if the OS given by the dump is unknown. The values stored in this // field should match those used by MinidumpSystemInfo::GetOS. optional string os_short = 8; // A string identifying the version of the operating system, such as // "5.1.2600 Service Pack 2" or "10.4.8 8L2127". If the dump does not // contain this information, this field will be empty. optional string os_version = 9; // A string identifying the basic CPU family, such as "x86" or "ppc". // If this information is present in the dump but its value is unknown, // this field will contain a numeric value. If the information is not // present in the dump, this field will be empty. The values stored in // this field should match those used by MinidumpSystemInfo::GetCPU. optional string cpu = 10; // A string further identifying the specific CPU, such as // "GenuineIntel level 6 model 13 stepping 8". If the information is not // present in the dump, or additional identifying information is not // defined for the CPU family, this field will be empty. optional string cpu_info = 11; // The number of processors in the system. Will be greater than one for // multi-core systems. optional int32 cpu_count = 12; // Leave the ability to add the raw minidump to this representation } // Represents a single frame in a stack // See src/google_breakpad/processor/code_module.h message StackFrame { // Next value: 8 // The program counter location as an absolute virtual address. For the // innermost called frame in a stack, this will be an exact program counter // or instruction pointer value. For all other frames, this will be within // the instruction that caused execution to branch to a called function, // but may not necessarily point to the exact beginning of that instruction. required int64 instruction = 1; // The module in which the instruction resides. optional CodeModule module = 2; // The function name, may be omitted if debug symbols are not available. optional string function_name = 3; // The start address of the function, may be omitted if debug symbols // are not available. optional int64 function_base = 4; // The source file name, may be omitted if debug symbols are not available. optional string source_file_name = 5; // The (1-based) source line number, may be omitted if debug symbols are // not available. optional int32 source_line = 6; // The start address of the source line, may be omitted if debug symbols // are not available. optional int64 source_line_base = 7; } // Carries information about code modules that are loaded into a process. // See src/google_breakpad/processor/code_module.h message CodeModule { // Next value: 8 // The base address of this code module as it was loaded by the process. optional int64 base_address = 1; // The size of the code module. optional int64 size = 2; // The path or file name that the code module was loaded from. optional string code_file = 3; // An identifying string used to discriminate between multiple versions and // builds of the same code module. This may contain a uuid, timestamp, // version number, or any combination of this or other information, in an // implementation-defined format. optional string code_identifier = 4; // The filename containing debugging information associated with the code // module. If debugging information is stored in a file separate from the // code module itself (as is the case when .pdb or .dSYM files are used), // this will be different from code_file. If debugging information is // stored in the code module itself (possibly prior to stripping), this // will be the same as code_file. optional string debug_file = 5; // An identifying string similar to code_identifier, but identifies a // specific version and build of the associated debug file. This may be // the same as code_identifier when the debug_file and code_file are // identical or when the same identifier is used to identify distinct // debug and code files. optional string debug_identifier = 6; // A human-readable representation of the code module's version. optional string version = 7; }