Index: chrome/app/chrome_main.cc |
diff --git a/chrome/app/chrome_main.cc b/chrome/app/chrome_main.cc |
index c1cf145b014eb62c59ee4c6ac216e32b4e39bec5..80cd0fb2f8944215f40ee84c89adb23b886750cc 100644 |
--- a/chrome/app/chrome_main.cc |
+++ b/chrome/app/chrome_main.cc |
@@ -7,7 +7,9 @@ |
#include "content/public/app/content_main.h" |
#if defined(OS_WIN) |
+#include "base/debug/dump_without_crashing.h" |
#include "base/win/win_util.h" |
+#include "chrome/common/chrome_constants.h" |
#define DLLEXPORT __declspec(dllexport) |
@@ -38,6 +40,15 @@ int ChromeMain(int argc, const char** argv) { |
base::win::SetAbortBehaviorForCrashReporting(); |
params.instance = instance; |
params.sandbox_info = sandbox_info; |
+ |
+ // SetDumpWithoutCrashingFunction must be passed the DumpProcess function |
+ // from the EXE and not from the DLL in order for DumpWithoutCrashing to |
+ // function correctly. |
+ typedef void (__cdecl *DumpProcessFunction)(); |
+ DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>( |
+ ::GetProcAddress(::GetModuleHandle(chrome::kBrowserProcessExecutableName), |
+ "DumpProcessWithoutCrash")); |
+ base::debug::SetDumpWithoutCrashingFunction(DumpProcess); |
#else |
params.argc = argc; |
params.argv = argv; |