Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: third_party/crashpad/crashpad/minidump/minidump_file_writer.h

Issue 2773813002: Update Crashpad to 8e37886d418dd042c3c7bfadac99214739ee4d98 (Closed)
Patch Set: Update Crashpad to 8e37886d418dd042c3c7bfadac99214739ee4d98 Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 15 matching lines...) Expand all
26 #include "base/macros.h" 26 #include "base/macros.h"
27 #include "minidump/minidump_extensions.h" 27 #include "minidump/minidump_extensions.h"
28 #include "minidump/minidump_stream_writer.h" 28 #include "minidump/minidump_stream_writer.h"
29 #include "minidump/minidump_writable.h" 29 #include "minidump/minidump_writable.h"
30 #include "util/file/file_io.h" 30 #include "util/file/file_io.h"
31 #include "util/stdlib/pointer_container.h" 31 #include "util/stdlib/pointer_container.h"
32 32
33 namespace crashpad { 33 namespace crashpad {
34 34
35 class ProcessSnapshot; 35 class ProcessSnapshot;
36 class MinidumpUserExtensionStreamDataSource;
36 37
37 //! \brief The root-level object in a minidump file. 38 //! \brief The root-level object in a minidump file.
38 //! 39 //!
39 //! This object writes a MINIDUMP_HEADER and list of MINIDUMP_DIRECTORY entries 40 //! This object writes a MINIDUMP_HEADER and list of MINIDUMP_DIRECTORY entries
40 //! to a minidump file. 41 //! to a minidump file.
41 class MinidumpFileWriter final : public internal::MinidumpWritable { 42 class MinidumpFileWriter final : public internal::MinidumpWritable {
42 public: 43 public:
43 MinidumpFileWriter(); 44 MinidumpFileWriter();
44 ~MinidumpFileWriter() override; 45 ~MinidumpFileWriter() override;
45 46
46 //! \brief Initializes the MinidumpFileWriter and populates it with 47 //! \brief Initializes the MinidumpFileWriter and populates it with
47 //! appropriate child streams based on \a process_snapshot. 48 //! appropriate child streams based on \a process_snapshot.
48 //! 49 //!
49 //! This method will add additional streams to the minidump file as children 50 //! This method will add additional streams to the minidump file as children
50 //! of the MinidumpFileWriter object and as pointees of the top-level 51 //! of the MinidumpFileWriter object and as pointees of the top-level
51 //! MINIDUMP_DIRECTORY. To do so, it will obtain other snapshot information 52 //! MINIDUMP_DIRECTORY. To do so, it will obtain other snapshot information
52 //! from \a process_snapshot, such as a SystemSnapshot, lists of 53 //! from \a process_snapshot, such as a SystemSnapshot, lists of
53 //! ThreadSnapshot and ModuleSnapshot objects, and, if available, an 54 //! ThreadSnapshot and ModuleSnapshot objects, and, if available, an
54 //! ExceptionSnapshot. 55 //! ExceptionSnapshot.
55 //! 56 //!
56 //! The streams are added in the order that they are expected to be most 57 //! The streams are added in the order that they are expected to be most
57 //! useful to minidump readers, to improve data locality and minimize seeking. 58 //! useful to minidump readers, to improve data locality and minimize seeking.
58 //! The streams are added in this order: 59 //! The streams are added in this order:
59 //! - kMinidumpStreamTypeSystemInfo 60 //! - kMinidumpStreamTypeSystemInfo
60 //! - kMinidumpStreamTypeMiscInfo 61 //! - kMinidumpStreamTypeMiscInfo
61 //! - kMinidumpStreamTypeThreadList 62 //! - kMinidumpStreamTypeThreadList
62 //! - kMinidumpStreamTypeException (if present) 63 //! - kMinidumpStreamTypeException (if present)
63 //! - kMinidumpStreamTypeModuleList 64 //! - kMinidumpStreamTypeModuleList
65 //! - kMinidumpStreamTypeUnloadedModuleList (if present)
64 //! - kMinidumpStreamTypeCrashpadInfo (if present) 66 //! - kMinidumpStreamTypeCrashpadInfo (if present)
67 //! - kMinidumpStreamTypeMemoryInfoList (if present)
68 //! - kMinidumpStreamTypeHandleData (if present)
69 //! - User streams (if present)
65 //! - kMinidumpStreamTypeMemoryList 70 //! - kMinidumpStreamTypeMemoryList
66 //! 71 //!
67 //! \param[in] process_snapshot The process snapshot to use as source data. 72 //! \param[in] process_snapshot The process snapshot to use as source data.
68 //! 73 //!
69 //! \note Valid in #kStateMutable. No mutator methods may be called before 74 //! \note Valid in #kStateMutable. No mutator methods may be called before
70 //! this method, and it is not normally necessary to call any mutator 75 //! this method, and it is not normally necessary to call any mutator
71 //! methods after this method. 76 //! methods after this method.
72 void InitializeFromSnapshot(const ProcessSnapshot* process_snapshot); 77 void InitializeFromSnapshot(const ProcessSnapshot* process_snapshot);
73 78
74 //! \brief Sets MINIDUMP_HEADER::Timestamp. 79 //! \brief Sets MINIDUMP_HEADER::Timestamp.
75 //! 80 //!
76 //! \note Valid in #kStateMutable. 81 //! \note Valid in #kStateMutable.
77 void SetTimestamp(time_t timestamp); 82 void SetTimestamp(time_t timestamp);
78 83
79 //! \brief Adds a stream to the minidump file and arranges for a 84 //! \brief Adds a stream to the minidump file and arranges for a
80 //! MINIDUMP_DIRECTORY entry to point to it. 85 //! MINIDUMP_DIRECTORY entry to point to it.
81 //! 86 //!
82 //! This object takes ownership of \a stream and becomes its parent in the 87 //! This object takes ownership of \a stream and becomes its parent in the
83 //! overall tree of internal::MinidumpWritable objects. 88 //! overall tree of internal::MinidumpWritable objects.
84 //! 89 //!
85 //! At most one object of each stream type (as obtained from 90 //! At most one object of each stream type (as obtained from
86 //! internal::MinidumpStreamWriter::StreamType()) may be added to a 91 //! internal::MinidumpStreamWriter::StreamType()) may be added to a
87 //! MinidumpFileWriter object. It is an error to attempt to add multiple 92 //! MinidumpFileWriter object. If an attempt is made to add a stream whose
88 //! streams with the same stream type. 93 //! type matches an existing stream’s type, this method discards the new
94 //! stream.
89 //! 95 //!
90 //! \note Valid in #kStateMutable. 96 //! \note Valid in #kStateMutable.
91 void AddStream(std::unique_ptr<internal::MinidumpStreamWriter> stream); 97 //!
98 //! \return `true` on success. `false` on failure, as occurs when an attempt
99 //! is made to add a stream whose type matches an existing stream’s type,
100 //! with a message logged.
101 bool AddStream(std::unique_ptr<internal::MinidumpStreamWriter> stream);
102
103 //! \brief Adds a user extension stream to the minidump file and arranges for
104 //! a MINIDUMP_DIRECTORY entry to point to it.
105 //!
106 //! This object takes ownership of \a user_extension_stream_data.
107 //!
108 //! At most one object of each stream type (as obtained from
109 //! internal::MinidumpStreamWriter::StreamType()) may be added to a
110 //! MinidumpFileWriter object. If an attempt is made to add a stream whose
111 //! type matches an existing stream’s type, this method discards the new
112 //! stream.
113 //!
114 //! \param[in] user_extension_stream_data The stream data to add to the
115 //! minidump file. Note that the buffer this object points to must be valid
116 //! through WriteEverything().
117 //!
118 //! \note Valid in #kStateMutable.
119 //!
120 //! \return `true` on success. `false` on failure, as occurs when an attempt
121 //! is made to add a stream whose type matches an existing stream’s type,
122 //! with a message logged.
123 bool AddUserExtensionStream(
124 std::unique_ptr<MinidumpUserExtensionStreamDataSource>
125 user_extension_stream_data);
92 126
93 // MinidumpWritable: 127 // MinidumpWritable:
94 128
95 //! \copydoc internal::MinidumpWritable::WriteEverything() 129 //! \copydoc internal::MinidumpWritable::WriteEverything()
96 //! 130 //!
97 //! This method does not initially write the final value for 131 //! This method does not initially write the final value for
98 //! MINIDUMP_HEADER::Signature. After all child objects have been written, it 132 //! MINIDUMP_HEADER::Signature. After all child objects have been written, it
99 //! rewinds to the beginning of the file and writes the correct value for this 133 //! rewinds to the beginning of the file and writes the correct value for this
100 //! field. This prevents incompletely-written minidump files from being 134 //! field. This prevents incompletely-written minidump files from being
101 //! mistaken for valid ones. 135 //! mistaken for valid ones.
(...skipping 13 matching lines...) Expand all
115 149
116 // Protects against multiple streams with the same ID being added. 150 // Protects against multiple streams with the same ID being added.
117 std::set<MinidumpStreamType> stream_types_; 151 std::set<MinidumpStreamType> stream_types_;
118 152
119 DISALLOW_COPY_AND_ASSIGN(MinidumpFileWriter); 153 DISALLOW_COPY_AND_ASSIGN(MinidumpFileWriter);
120 }; 154 };
121 155
122 } // namespace crashpad 156 } // namespace crashpad
123 157
124 #endif // CRASHPAD_MINIDUMP_MINIDUMP_WRITER_H_ 158 #endif // CRASHPAD_MINIDUMP_MINIDUMP_WRITER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698