Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Initialize logging for crashpad (#26266)
* fix: Initialize logging for crashpad * chore: update mini_chromium * conditionally access CommandLine because crashpad doesn't initialize one. https://chromium-review.googlesource.com/c/chromium/src/+/2490880 * chore: update patches Co-authored-by: deepak1556 <hop2deep@gmail.com>
- Loading branch information
1 parent
ae3c79d
commit 0aef4d6
Showing
2 changed files
with
147 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Joshua Peraza <jperaza@chromium.org> | ||
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 <mark@chromium.org> | ||
|
||
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) |