Index: handler/win/crash_report_exception_handler.cc |
diff --git a/handler/win/crash_report_exception_handler.cc b/handler/win/crash_report_exception_handler.cc |
index 843ac0f5a9aade7cfde120853f4fadffdb8aa9c1..a8ac655d98c576736cc44eb42f7b704d683037ab 100644 |
--- a/handler/win/crash_report_exception_handler.cc |
+++ b/handler/win/crash_report_exception_handler.cc |
@@ -64,6 +64,39 @@ unsigned int CrashReportExceptionHandler::ExceptionHandlerServerException( |
const unsigned int termination_code = |
process_snapshot.Exception()->Exception(); |
+ // XXX XXX XXX |
+ ScopedFileHandle file(LoggingOpenFileForWrite( |
+ base::FilePath(FILE_PATH_LITERAL( |
+ "c:\\users\\scott\\desktop\\minidumpwritedump.dmp")), |
+ FileWriteMode::kTruncateOrCreate, |
+ FilePermissions::kWorldReadable)); |
+ MINIDUMP_EXCEPTION_INFORMATION minidump_exception_information; |
+ ExceptionInformation exception_information; |
+ ProcessReaderWin process_reader; |
+ if (!process_reader.Initialize(process, ProcessSuspensionState::kSuspended)) |
+ return false; |
+ if (!process_reader.ReadMemory(exception_information_address, |
+ sizeof(exception_information), |
+ &exception_information)) { |
+ LOG(WARNING) << "ReadMemory ExceptionInformation failed"; |
+ return false; |
+ } |
+ minidump_exception_information.ThreadId = |
+ static_cast<DWORD>(process_snapshot.Exception()->ThreadID()); |
+ minidump_exception_information.ExceptionPointers = |
+ reinterpret_cast<EXCEPTION_POINTERS*>( |
+ exception_information.exception_pointers); |
+ minidump_exception_information.ClientPointers = true; |
+ MiniDumpWriteDump(process, |
+ GetProcessId(process), |
+ file.get(), |
+ static_cast<MINIDUMP_TYPE>(MiniDumpWithFullMemory | |
+ MiniDumpWithHandleData), |
+ &minidump_exception_information, |
+ nullptr, |
+ nullptr); |
+ // XXX XXX XXX |
+ |
CrashpadInfoClientOptions client_options; |
process_snapshot.GetCrashpadOptions(&client_options); |
if (client_options.crashpad_handler_behavior != TriState::kDisabled) { |