|
1 // Copyright (c) 2010, Google Inc. |
|
2 // All rights reserved. |
|
3 // |
|
4 // Redistribution and use in source and binary forms, with or without |
|
5 // modification, are permitted provided that the following conditions are |
|
6 // met: |
|
7 // |
|
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 |
|
13 // distribution. |
|
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. |
|
17 // |
|
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. |
|
29 |
|
30 // process_state_proto.proto: A client proto representation of a process, |
|
31 // in a fully-digested state. |
|
32 // |
|
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. |
|
39 // |
|
40 // Author: Jess Gray |
|
41 |
|
42 syntax = "proto2"; |
|
43 |
|
44 package google_breakpad; |
|
45 |
|
46 // A proto representation of a process, in a fully-digested state. |
|
47 // See src/google_breakpad/processor/process_state.h |
|
48 message ProcessStateProto { |
|
49 // Next value: 13 |
|
50 |
|
51 // The time-date stamp of the original minidump (time_t format) |
|
52 optional int64 time_date_stamp = 1; |
|
53 |
|
54 message Crash { |
|
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; |
|
59 |
|
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; |
|
65 } |
|
66 optional Crash crash = 2; |
|
67 |
|
68 |
|
69 // If there was an assertion that was hit, a textual representation |
|
70 // of that assertion, possibly including the file and line at which |
|
71 // it occurred. |
|
72 optional string assertion = 3; |
|
73 |
|
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; |
|
80 |
|
81 message Thread { |
|
82 // Stack for the given thread |
|
83 repeated StackFrame frames = 1; |
|
84 } |
|
85 |
|
86 // Stacks for each thread (except possibly the exception handler |
|
87 // thread) at the time of the crash. |
|
88 repeated Thread threads = 5; |
|
89 |
|
90 // The modules that were loaded into the process represented by the |
|
91 // ProcessState. |
|
92 repeated CodeModule modules = 6; |
|
93 |
|
94 // System Info: OS and CPU |
|
95 |
|
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; |
|
101 |
|
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; |
|
108 |
|
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; |
|
113 |
|
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; |
|
120 |
|
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; |
|
126 |
|
127 // The number of processors in the system. Will be greater than one for |
|
128 // multi-core systems. |
|
129 optional int32 cpu_count = 12; |
|
130 |
|
131 // Leave the ability to add the raw minidump to this representation |
|
132 } |
|
133 |
|
134 |
|
135 // Represents a single frame in a stack |
|
136 // See src/google_breakpad/processor/code_module.h |
|
137 message StackFrame { |
|
138 // Next value: 8 |
|
139 |
|
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; |
|
146 |
|
147 // The module in which the instruction resides. |
|
148 optional CodeModule module = 2; |
|
149 |
|
150 // The function name, may be omitted if debug symbols are not available. |
|
151 optional string function_name = 3; |
|
152 |
|
153 // The start address of the function, may be omitted if debug symbols |
|
154 // are not available. |
|
155 optional int64 function_base = 4; |
|
156 |
|
157 // The source file name, may be omitted if debug symbols are not available. |
|
158 optional string source_file_name = 5; |
|
159 |
|
160 // The (1-based) source line number, may be omitted if debug symbols are |
|
161 // not available. |
|
162 optional int32 source_line = 6; |
|
163 |
|
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; |
|
167 } |
|
168 |
|
169 |
|
170 // Carries information about code modules that are loaded into a process. |
|
171 // See src/google_breakpad/processor/code_module.h |
|
172 message CodeModule { |
|
173 // Next value: 8 |
|
174 |
|
175 // The base address of this code module as it was loaded by the process. |
|
176 optional int64 base_address = 1; |
|
177 |
|
178 // The size of the code module. |
|
179 optional int64 size = 2; |
|
180 |
|
181 // The path or file name that the code module was loaded from. |
|
182 optional string code_file = 3; |
|
183 |
|
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; |
|
189 |
|
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; |
|
197 |
|
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; |
|
204 |
|
205 // A human-readable representation of the code module's version. |
|
206 optional string version = 7; |
|
207 } |