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

Side by Side Diff: handler/win/crash_report_exception_handler.cc

Issue 1405443006: hack to MiniDumpWriteDump from exception handler (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@handles-redux
Patch Set: Created 5 years, 2 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
« no previous file with comments | « handler/handler.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Crashpad Authors. All rights reserved. 1 // Copyright 2015 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 if (!process_snapshot.InitializeException(exception_information_address)) { 57 if (!process_snapshot.InitializeException(exception_information_address)) {
58 LOG(WARNING) << "ProcessSnapshotWin::InitializeException failed"; 58 LOG(WARNING) << "ProcessSnapshotWin::InitializeException failed";
59 return kFailedTerminationCode; 59 return kFailedTerminationCode;
60 } 60 }
61 61
62 // Now that we have the exception information, even if something else fails we 62 // Now that we have the exception information, even if something else fails we
63 // can terminate the process with the correct exit code. 63 // can terminate the process with the correct exit code.
64 const unsigned int termination_code = 64 const unsigned int termination_code =
65 process_snapshot.Exception()->Exception(); 65 process_snapshot.Exception()->Exception();
66 66
67 // XXX XXX XXX
68 ScopedFileHandle file(LoggingOpenFileForWrite(
69 base::FilePath(FILE_PATH_LITERAL(
70 "c:\\users\\scott\\desktop\\minidumpwritedump.dmp")),
71 FileWriteMode::kTruncateOrCreate,
72 FilePermissions::kWorldReadable));
73 MINIDUMP_EXCEPTION_INFORMATION minidump_exception_information;
74 ExceptionInformation exception_information;
75 ProcessReaderWin process_reader;
76 if (!process_reader.Initialize(process, ProcessSuspensionState::kSuspended))
77 return false;
78 if (!process_reader.ReadMemory(exception_information_address,
79 sizeof(exception_information),
80 &exception_information)) {
81 LOG(WARNING) << "ReadMemory ExceptionInformation failed";
82 return false;
83 }
84 minidump_exception_information.ThreadId =
85 static_cast<DWORD>(process_snapshot.Exception()->ThreadID());
86 minidump_exception_information.ExceptionPointers =
87 reinterpret_cast<EXCEPTION_POINTERS*>(
88 exception_information.exception_pointers);
89 minidump_exception_information.ClientPointers = true;
90 MiniDumpWriteDump(process,
91 GetProcessId(process),
92 file.get(),
93 static_cast<MINIDUMP_TYPE>(MiniDumpWithFullMemory |
94 MiniDumpWithHandleData),
95 &minidump_exception_information,
96 nullptr,
97 nullptr);
98 // XXX XXX XXX
99
67 CrashpadInfoClientOptions client_options; 100 CrashpadInfoClientOptions client_options;
68 process_snapshot.GetCrashpadOptions(&client_options); 101 process_snapshot.GetCrashpadOptions(&client_options);
69 if (client_options.crashpad_handler_behavior != TriState::kDisabled) { 102 if (client_options.crashpad_handler_behavior != TriState::kDisabled) {
70 UUID client_id; 103 UUID client_id;
71 Settings* const settings = database_->GetSettings(); 104 Settings* const settings = database_->GetSettings();
72 if (settings) { 105 if (settings) {
73 // If GetSettings() or GetClientID() fails, something else will log a 106 // If GetSettings() or GetClientID() fails, something else will log a
74 // message and client_id will be left at its default value, all zeroes, 107 // message and client_id will be left at its default value, all zeroes,
75 // which is appropriate. 108 // which is appropriate.
76 settings->GetClientID(&client_id); 109 settings->GetClientID(&client_id);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 return termination_code; 143 return termination_code;
111 } 144 }
112 145
113 upload_thread_->ReportPending(); 146 upload_thread_->ReportPending();
114 } 147 }
115 148
116 return termination_code; 149 return termination_code;
117 } 150 }
118 151
119 } // namespace crashpad 152 } // namespace crashpad
OLDNEW
« no previous file with comments | « handler/handler.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698