diff --git a/atom/app/atom_main_delegate.cc b/atom/app/atom_main_delegate.cc index 1c35bced3e6c..44f2048c091f 100644 --- a/atom/app/atom_main_delegate.cc +++ b/atom/app/atom_main_delegate.cc @@ -19,10 +19,6 @@ #include "content/public/common/content_switches.h" #include "ui/base/resource/resource_bundle.h" -#if defined(OS_WIN) -#include "atom/common/crash_reporter/crash_reporter_win.h" -#endif - namespace atom { namespace { @@ -73,10 +69,6 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) { // Logging with pid and timestamp. logging::SetLogItems(true, false, true, false); -#if defined(OS_WIN) - crash_reporter::SetupV8CodeRangeHook(); -#endif - #if defined(DEBUG) && defined(OS_LINUX) // Enable convient stack printing. base::debug::EnableInProcessStackDumping(); diff --git a/atom/common/crash_reporter/crash_reporter_win.cc b/atom/common/crash_reporter/crash_reporter_win.cc index 8ea5b6689cfb..78bd196f6cce 100644 --- a/atom/common/crash_reporter/crash_reporter_win.cc +++ b/atom/common/crash_reporter/crash_reporter_win.cc @@ -133,11 +133,6 @@ void UnregisterNonABICompliantCodeRange(void* start) { } // namespace -void SetupV8CodeRangeHook() { - gin::Debug::SetCodeRangeCreatedCallback(RegisterNonABICompliantCodeRange); - gin::Debug::SetCodeRangeDeletedCallback(UnregisterNonABICompliantCodeRange); -} - CrashReporterWin::CrashReporterWin() { } @@ -187,6 +182,20 @@ void CrashReporterWin::InitBreakpad(const std::string& product_name, if (!breakpad_->IsOutOfProcess()) LOG(ERROR) << "Cannot initialize out-of-process crash handler"; + +#ifdef _WIN64 + // Hook up V8 to breakpad. + { + // gin::Debug::SetCodeRangeCreatedCallback only runs the callback when + // Isolate is just created, so we have to manually run following code here. + void* code_range = nullptr; + size_t size = 0; + v8::Isolate::GetCurrent()->GetCodeRange(&code_range, &size); + if (code_range && size) + RegisterNonABICompliantCodeRange(code_range, size); + } + gin::Debug::SetCodeRangeDeletedCallback(UnregisterNonABICompliantCodeRange); +#endif } void CrashReporterWin::SetUploadParameters() { diff --git a/atom/common/crash_reporter/crash_reporter_win.h b/atom/common/crash_reporter/crash_reporter_win.h index 1725ca328310..09c7ff4eaad6 100644 --- a/atom/common/crash_reporter/crash_reporter_win.h +++ b/atom/common/crash_reporter/crash_reporter_win.h @@ -17,9 +17,6 @@ template struct DefaultSingletonTraits; namespace crash_reporter { -// Hook up V8 to breakpad. -void SetupV8CodeRangeHook(); - class CrashReporterWin : public CrashReporter { public: static CrashReporterWin* GetInstance();