|
@@ -0,0 +1,146 @@
|
|
|
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
+From: Joshua Peraza <[email protected]>
|
|
|
+Date: Wed, 21 Oct 2020 11:10:25 -0700
|
|
|
+Subject: Initialize logging for crashpad
|
|
|
+
|
|
|
+Although logging to files is not yet supported by mini_chromium, it is
|
|
|
+the default behavior for OS_WIN in chromium. This change should
|
|
|
+cause crashpad to log via OutputDebugString() on Windows, instead of
|
|
|
+debug.log files. Future work (crbug.com/crashpad/26) should arrange for
|
|
|
+logs to be uploaded with reports, embedded in associated minidumps or as
|
|
|
+file attachments.
|
|
|
+
|
|
|
+Bug: chromium:711159
|
|
|
+Change-Id: I0f9004f7de94dd29d555cc7d23c48a63da6b4bba
|
|
|
+Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2425108
|
|
|
+Reviewed-by: Mark Mentovai <[email protected]>
|
|
|
+
|
|
|
+diff --git a/base/logging.cc b/base/logging.cc
|
|
|
+index 2da71c73819b34a45911131e2cc8bff861178789..6b701b7a8dee0d015758e11771c5c1f3a6b8d13b 100644
|
|
|
+--- a/base/logging.cc
|
|
|
++++ b/base/logging.cc
|
|
|
+@@ -421,21 +421,23 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
|
|
|
+ 0u);
|
|
|
+ #endif
|
|
|
+
|
|
|
+- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
|
|
+- // Don't bother initializing |g_vlog_info| unless we use one of the
|
|
|
+- // vlog switches.
|
|
|
+- if (command_line->HasSwitch(switches::kV) ||
|
|
|
+- command_line->HasSwitch(switches::kVModule)) {
|
|
|
+- // NOTE: If |g_vlog_info| has already been initialized, it might be in use
|
|
|
+- // by another thread. Don't delete the old VLogInfo, just create a second
|
|
|
+- // one. We keep track of both to avoid memory leak warnings.
|
|
|
+- CHECK(!g_vlog_info_prev);
|
|
|
+- g_vlog_info_prev = g_vlog_info;
|
|
|
+-
|
|
|
+- g_vlog_info =
|
|
|
+- new VlogInfo(command_line->GetSwitchValueASCII(switches::kV),
|
|
|
+- command_line->GetSwitchValueASCII(switches::kVModule),
|
|
|
+- &g_min_log_level);
|
|
|
++ if (base::CommandLine::InitializedForCurrentProcess()) {
|
|
|
++ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
|
|
++ // Don't bother initializing |g_vlog_info| unless we use one of the
|
|
|
++ // vlog switches.
|
|
|
++ if (command_line->HasSwitch(switches::kV) ||
|
|
|
++ command_line->HasSwitch(switches::kVModule)) {
|
|
|
++ // NOTE: If |g_vlog_info| has already been initialized, it might be in use
|
|
|
++ // by another thread. Don't delete the old VLogInfo, just create a second
|
|
|
++ // one. We keep track of both to avoid memory leak warnings.
|
|
|
++ CHECK(!g_vlog_info_prev);
|
|
|
++ g_vlog_info_prev = g_vlog_info;
|
|
|
++
|
|
|
++ g_vlog_info =
|
|
|
++ new VlogInfo(command_line->GetSwitchValueASCII(switches::kV),
|
|
|
++ command_line->GetSwitchValueASCII(switches::kVModule),
|
|
|
++ &g_min_log_level);
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ g_logging_destination = settings.logging_dest;
|
|
|
+@@ -446,7 +448,10 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
|
|
|
+ config.min_severity = FX_LOG_INFO;
|
|
|
+ config.console_fd = -1;
|
|
|
+ config.log_service_channel = ZX_HANDLE_INVALID;
|
|
|
+- std::string log_tag = command_line->GetProgram().BaseName().AsUTF8Unsafe();
|
|
|
++ std::string log_tag = base::CommandLine::ForCurrentProcess()
|
|
|
++ ->GetProgram()
|
|
|
++ .BaseName()
|
|
|
++ .AsUTF8Unsafe();
|
|
|
+ const char* log_tag_data = log_tag.data();
|
|
|
+ config.tags = &log_tag_data;
|
|
|
+ config.num_tags = 1;
|
|
|
+diff --git a/third_party/crashpad/crashpad/DEPS b/third_party/crashpad/crashpad/DEPS
|
|
|
+index ccb447cde9a9ee3c1fe29419abfa8aa63d777455..6ee9db5400cf12ae4812a261e78234581b036c25 100644
|
|
|
+--- a/third_party/crashpad/crashpad/DEPS
|
|
|
++++ b/third_party/crashpad/crashpad/DEPS
|
|
|
+@@ -42,7 +42,7 @@ deps = {
|
|
|
+ '7bde79cc274d06451bf65ae82c012a5d3e476b5a',
|
|
|
+ 'crashpad/third_party/mini_chromium/mini_chromium':
|
|
|
+ Var('chromium_git') + '/chromium/mini_chromium@' +
|
|
|
+- 'ae14a14ab4cea36db9c446741581d427a7fc7f89',
|
|
|
++ '5fc64bfbf1c000161445c586de45e40464ff2314',
|
|
|
+ 'crashpad/third_party/libfuzzer/src':
|
|
|
+ Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git@' +
|
|
|
+ 'fda403cf93ecb8792cb1d061564d89a6553ca020',
|
|
|
+diff --git a/third_party/crashpad/crashpad/handler/handler_main.cc b/third_party/crashpad/crashpad/handler/handler_main.cc
|
|
|
+index d56857ff9042a0e4ed55bb101e419948f4028305..579a7c364077d2b6a78803fa75f7180109b37c89 100644
|
|
|
+--- a/third_party/crashpad/crashpad/handler/handler_main.cc
|
|
|
++++ b/third_party/crashpad/crashpad/handler/handler_main.cc
|
|
|
+@@ -494,16 +494,26 @@ class ScopedStoppable {
|
|
|
+ DISALLOW_COPY_AND_ASSIGN(ScopedStoppable);
|
|
|
+ };
|
|
|
+
|
|
|
++void InitCrashpadLogging() {
|
|
|
++ logging::LoggingSettings settings;
|
|
|
++#if defined(OS_CHROMEOS)
|
|
|
++ settings.logging_dest = logging::LOG_TO_FILE;
|
|
|
++ settings.log_file_path = "/var/log/chrome/chrome";
|
|
|
++#elif defined(OS_WIN)
|
|
|
++ settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
|
|
|
++#else
|
|
|
++ settings.logging_dest =
|
|
|
++ logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
|
|
|
++#endif
|
|
|
++ logging::InitLogging(settings);
|
|
|
++}
|
|
|
++
|
|
|
+ } // namespace
|
|
|
+
|
|
|
+ int HandlerMain(int argc,
|
|
|
+ char* argv[],
|
|
|
+ const UserStreamDataSources* user_stream_sources) {
|
|
|
+-#if defined(OS_CHROMEOS)
|
|
|
+- if (freopen("/var/log/chrome/chrome", "a", stderr) == nullptr) {
|
|
|
+- PLOG(ERROR) << "Failed to redirect stderr to /var/log/chrome/chrome";
|
|
|
+- }
|
|
|
+-#endif
|
|
|
++ InitCrashpadLogging();
|
|
|
+
|
|
|
+ InstallCrashHandler();
|
|
|
+ CallMetricsRecordNormalExit metrics_record_normal_exit;
|
|
|
+diff --git a/third_party/crashpad/crashpad/test/gtest_main.cc b/third_party/crashpad/crashpad/test/gtest_main.cc
|
|
|
+index 67cfa0d72d7eb469775201f3a9df906f27c302a9..c67b8e24bb940935d5da88428ed3058a135f5a57 100644
|
|
|
+--- a/third_party/crashpad/crashpad/test/gtest_main.cc
|
|
|
++++ b/third_party/crashpad/crashpad/test/gtest_main.cc
|
|
|
+@@ -12,6 +12,7 @@
|
|
|
+ // See the License for the specific language governing permissions and
|
|
|
+ // limitations under the License.
|
|
|
+
|
|
|
++#include "base/logging.h"
|
|
|
+ #include "build/build_config.h"
|
|
|
+ #include "gtest/gtest.h"
|
|
|
+ #include "test/main_arguments.h"
|
|
|
+@@ -99,6 +100,12 @@ int main(int argc, char* argv[]) {
|
|
|
+
|
|
|
+ #endif // CRASHPAD_IS_IN_CHROMIUM
|
|
|
+
|
|
|
++ // base::TestSuite initializes logging when using Chromium's test launcher.
|
|
|
++ logging::LoggingSettings settings;
|
|
|
++ settings.logging_dest =
|
|
|
++ logging::LOG_TO_STDERR | logging::LOG_TO_SYSTEM_DEBUG_LOG;
|
|
|
++ logging::InitLogging(settings);
|
|
|
++
|
|
|
+ #if defined(CRASHPAD_TEST_LAUNCHER_GOOGLEMOCK)
|
|
|
+ testing::InitGoogleMock(&argc, argv);
|
|
|
+ #elif defined(CRASHPAD_TEST_LAUNCHER_GOOGLETEST)
|