1
// Copyright (c) 2010, Google Inc.
2
// All rights reserved.
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are
8
// * Redistributions of source code must retain the above copyright
9
// notice, this list of conditions and the following disclaimer.
10
// * Redistributions in binary form must reproduce the above
11
// copyright notice, this list of conditions and the following disclaimer
12
// in the documentation and/or other materials provided with the
14
// * Neither the name of Google Inc. nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
// process_state_proto.proto: A client proto representation of a process,
31
// in a fully-digested state.
33
// Derived from earlier struct and class based models of a client-side
34
// processed minidump found under src/google_breakpad/processor. The
35
// file process_state.h holds the top level representation of this model,
36
// supported by additional classes. We've added a proto representation
37
// to ease serialization and parsing for server-side storage of crash
38
// reports processed on the client.
44
package google_breakpad;
46
// A proto representation of a process, in a fully-digested state.
47
// See src/google_breakpad/processor/process_state.h
48
message ProcessStateProto {
51
// The time-date stamp of the original minidump (time_t format)
52
optional int64 time_date_stamp = 1;
55
// The type of crash. OS- and possibly CPU- specific. For example,
56
// "EXCEPTION_ACCESS_VIOLATION" (Windows), "EXC_BAD_ACCESS /
57
// KERN_INVALID_ADDRESS" (Mac OS X), "SIGSEGV" (other Unix).
58
required string reason = 1;
60
// If crash_reason implicates memory, the memory address that caused the
61
// crash. For data access errors, this will be the data address that
62
// caused the fault. For code errors, this will be the address of the
63
// instruction that caused the fault.
64
required int64 address = 2;
66
optional Crash crash = 2;
69
// If there was an assertion that was hit, a textual representation
70
// of that assertion, possibly including the file and line at which
72
optional string assertion = 3;
74
// The index of the thread that requested a dump be written in the
75
// threads vector. If a dump was produced as a result of a crash, this
76
// will point to the thread that crashed. If the dump was produced as
77
// by user code without crashing, and the dump contains extended Breakpad
78
// information, this will point to the thread that requested the dump.
79
optional int32 requesting_thread = 4;
82
// Stack for the given thread
83
repeated StackFrame frames = 1;
86
// Stacks for each thread (except possibly the exception handler
87
// thread) at the time of the crash.
88
repeated Thread threads = 5;
90
// The modules that were loaded into the process represented by the
92
repeated CodeModule modules = 6;
94
// System Info: OS and CPU
96
// A string identifying the operating system, such as "Windows NT",
97
// "Mac OS X", or "Linux". If the information is present in the dump but
98
// its value is unknown, this field will contain a numeric value. If
99
// the information is not present in the dump, this field will be empty.
100
optional string os = 7;
102
// A short form of the os string, using lowercase letters and no spaces,
103
// suitable for use in a filesystem. Possible values are "windows",
104
// "mac", and "linux". Empty if the information is not present in the dump
105
// or if the OS given by the dump is unknown. The values stored in this
106
// field should match those used by MinidumpSystemInfo::GetOS.
107
optional string os_short = 8;
109
// A string identifying the version of the operating system, such as
110
// "5.1.2600 Service Pack 2" or "10.4.8 8L2127". If the dump does not
111
// contain this information, this field will be empty.
112
optional string os_version = 9;
114
// A string identifying the basic CPU family, such as "x86" or "ppc".
115
// If this information is present in the dump but its value is unknown,
116
// this field will contain a numeric value. If the information is not
117
// present in the dump, this field will be empty. The values stored in
118
// this field should match those used by MinidumpSystemInfo::GetCPU.
119
optional string cpu = 10;
121
// A string further identifying the specific CPU, such as
122
// "GenuineIntel level 6 model 13 stepping 8". If the information is not
123
// present in the dump, or additional identifying information is not
124
// defined for the CPU family, this field will be empty.
125
optional string cpu_info = 11;
127
// The number of processors in the system. Will be greater than one for
128
// multi-core systems.
129
optional int32 cpu_count = 12;
131
// Leave the ability to add the raw minidump to this representation
135
// Represents a single frame in a stack
136
// See src/google_breakpad/processor/code_module.h
140
// The program counter location as an absolute virtual address. For the
141
// innermost called frame in a stack, this will be an exact program counter
142
// or instruction pointer value. For all other frames, this will be within
143
// the instruction that caused execution to branch to a called function,
144
// but may not necessarily point to the exact beginning of that instruction.
145
required int64 instruction = 1;
147
// The module in which the instruction resides.
148
optional CodeModule module = 2;
150
// The function name, may be omitted if debug symbols are not available.
151
optional string function_name = 3;
153
// The start address of the function, may be omitted if debug symbols
154
// are not available.
155
optional int64 function_base = 4;
157
// The source file name, may be omitted if debug symbols are not available.
158
optional string source_file_name = 5;
160
// The (1-based) source line number, may be omitted if debug symbols are
162
optional int32 source_line = 6;
164
// The start address of the source line, may be omitted if debug symbols
165
// are not available.
166
optional int64 source_line_base = 7;
170
// Carries information about code modules that are loaded into a process.
171
// See src/google_breakpad/processor/code_module.h
175
// The base address of this code module as it was loaded by the process.
176
optional int64 base_address = 1;
178
// The size of the code module.
179
optional int64 size = 2;
181
// The path or file name that the code module was loaded from.
182
optional string code_file = 3;
184
// An identifying string used to discriminate between multiple versions and
185
// builds of the same code module. This may contain a uuid, timestamp,
186
// version number, or any combination of this or other information, in an
187
// implementation-defined format.
188
optional string code_identifier = 4;
190
// The filename containing debugging information associated with the code
191
// module. If debugging information is stored in a file separate from the
192
// code module itself (as is the case when .pdb or .dSYM files are used),
193
// this will be different from code_file. If debugging information is
194
// stored in the code module itself (possibly prior to stripping), this
195
// will be the same as code_file.
196
optional string debug_file = 5;
198
// An identifying string similar to code_identifier, but identifies a
199
// specific version and build of the associated debug file. This may be
200
// the same as code_identifier when the debug_file and code_file are
201
// identical or when the same identifier is used to identify distinct
202
// debug and code files.
203
optional string debug_identifier = 6;
205
// A human-readable representation of the code module's version.
206
optional string version = 7;