diff options
author | Tobias Sargeant <tobiasjs@google.com> | 2017-08-11 18:11:16 +0100 |
---|---|---|
committer | Tobias Sargeant <tobiasjs@chromium.org> | 2017-08-14 09:49:51 +0000 |
commit | 38cbbfed71efcb28931b5e4a83e3c0d4661f1548 (patch) | |
tree | 7a21f99fee8243fc344e70f0ef5b371849864ebf /src/client/linux/microdump_writer/microdump_writer_unittest.cc | |
parent | Increase maximum number of regions for minidump_stackwalk. (diff) | |
download | breakpad-38cbbfed71efcb28931b5e4a83e3c0d4661f1548.tar.xz |
Add crash reason and address to microdumps.
This will allow us to provide the right information for webview renderer
crashes. At the moment the crash information for the browser process is
captured (from the debuggerd output) instead.
BUG=754715
Change-Id: I409546311b6e38fe1cf804097c18d7bb2a015d83
Reviewed-on: https://chromium-review.googlesource.com/612381
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Diffstat (limited to 'src/client/linux/microdump_writer/microdump_writer_unittest.cc')
-rw-r--r-- | src/client/linux/microdump_writer/microdump_writer_unittest.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/client/linux/microdump_writer/microdump_writer_unittest.cc b/src/client/linux/microdump_writer/microdump_writer_unittest.cc index cbcd1399..c2fea022 100644 --- a/src/client/linux/microdump_writer/microdump_writer_unittest.cc +++ b/src/client/linux/microdump_writer/microdump_writer_unittest.cc @@ -65,6 +65,7 @@ MicrodumpExtraInfo MakeMicrodumpExtraInfo( info.build_fingerprint = build_fingerprint; info.product_info = product_info; info.gpu_fingerprint = gpu_fingerprint; + info.process_type = "Browser"; return info; } @@ -74,6 +75,7 @@ bool ContainsMicrodump(const std::string& buf) { } const char kIdentifiableString[] = "_IDENTIFIABLE_"; +const uintptr_t kCrashAddress = 0xdeaddeadu; void CrashAndGetMicrodump(const MappingList& mappings, const MicrodumpExtraInfo& microdump_extra_info, @@ -115,6 +117,8 @@ void CrashAndGetMicrodump(const MappingList& mappings, getcontext(&context.context); // Set a non-zero tid to avoid tripping asserts. context.tid = child; + context.siginfo.si_signo = MD_EXCEPTION_CODE_LIN_DUMP_REQUESTED; + context.siginfo.si_addr = reinterpret_cast<void*>(kCrashAddress); // Redirect temporarily stderr to the stderr.log file. int save_err = dup(STDERR_FILENO); @@ -172,6 +176,8 @@ void CheckMicrodumpContents(const string& microdump_content, std::istringstream iss(microdump_content); bool did_find_os_info = false; bool did_find_product_info = false; + bool did_find_process_type = false; + bool did_find_crash_reason = false; bool did_find_gpu_info = false; for (string line; std::getline(iss, line);) { if (line.find("O ") == 0) { @@ -190,9 +196,28 @@ void CheckMicrodumpContents(const string& microdump_content, // Check that the build fingerprint is in the right place. os_info_tokens >> token; + ASSERT_FALSE(os_info_tokens.fail()); if (expected_info.build_fingerprint) ASSERT_EQ(expected_info.build_fingerprint, token); did_find_os_info = true; + } else if (line.find("P ") == 0) { + if (expected_info.process_type) + ASSERT_EQ(string("P ") + expected_info.process_type, line); + did_find_process_type = true; + } else if (line.find("R ") == 0) { + std::istringstream crash_reason_tokens(line); + string token; + unsigned crash_reason; + string crash_reason_str; + intptr_t crash_address; + crash_reason_tokens.ignore(2); // Ignore the "R " preamble. + crash_reason_tokens >> std::hex >> crash_reason >> crash_reason_str >> + crash_address; + ASSERT_FALSE(crash_reason_tokens.fail()); + ASSERT_EQ(MD_EXCEPTION_CODE_LIN_DUMP_REQUESTED, crash_reason); + ASSERT_EQ("DUMP_REQUESTED", crash_reason_str); + ASSERT_EQ(0xDEADDEADu, kCrashAddress); + did_find_crash_reason = true; } else if (line.find("V ") == 0) { if (expected_info.product_info) ASSERT_EQ(string("V ") + expected_info.product_info, line); @@ -205,6 +230,8 @@ void CheckMicrodumpContents(const string& microdump_content, } ASSERT_TRUE(did_find_os_info); ASSERT_TRUE(did_find_product_info); + ASSERT_TRUE(did_find_process_type); + ASSERT_TRUE(did_find_crash_reason); ASSERT_TRUE(did_find_gpu_info); } |