Merge "Limit the number of log messages in a tombstone."
This commit is contained in:
commit
ec56afc415
2 changed files with 50 additions and 2 deletions
|
@ -2759,3 +2759,48 @@ TEST_F(CrasherTest, logd_skips_reading_logs_not_main_thread) {
|
|||
ASSERT_BACKTRACE_FRAME(result, "raise_debugger_signal");
|
||||
ASSERT_NOT_MATCH(result, kLogMessage);
|
||||
}
|
||||
|
||||
// Disable this test since there is a high liklihood that this would
|
||||
// be flaky since it requires 500 messages being in the log.
|
||||
TEST_F(CrasherTest, DISABLED_max_log_messages) {
|
||||
StartProcess([]() {
|
||||
for (size_t i = 0; i < 600; i++) {
|
||||
LOG(INFO) << "Message number " << i;
|
||||
}
|
||||
abort();
|
||||
});
|
||||
|
||||
unique_fd output_fd;
|
||||
StartIntercept(&output_fd);
|
||||
FinishCrasher();
|
||||
AssertDeath(SIGABRT);
|
||||
int intercept_result;
|
||||
FinishIntercept(&intercept_result);
|
||||
ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
|
||||
|
||||
std::string result;
|
||||
ConsumeFd(std::move(output_fd), &result);
|
||||
ASSERT_NOT_MATCH(result, "Message number 99");
|
||||
ASSERT_MATCH(result, "Message number 100");
|
||||
ASSERT_MATCH(result, "Message number 599");
|
||||
}
|
||||
|
||||
TEST_F(CrasherTest, log_with_newline) {
|
||||
StartProcess([]() {
|
||||
LOG(INFO) << "This line has a newline.\nThis is on the next line.";
|
||||
abort();
|
||||
});
|
||||
|
||||
unique_fd output_fd;
|
||||
StartIntercept(&output_fd);
|
||||
FinishCrasher();
|
||||
AssertDeath(SIGABRT);
|
||||
int intercept_result;
|
||||
FinishIntercept(&intercept_result);
|
||||
ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
|
||||
|
||||
std::string result;
|
||||
ConsumeFd(std::move(output_fd), &result);
|
||||
ASSERT_MATCH(result, ":\\s*This line has a newline.");
|
||||
ASSERT_MATCH(result, ":\\s*This is on the next line.");
|
||||
}
|
||||
|
|
|
@ -70,6 +70,9 @@
|
|||
|
||||
using android::base::StringPrintf;
|
||||
|
||||
// The maximum number of messages to save in the protobuf per file.
|
||||
static constexpr size_t kMaxLogMessages = 500;
|
||||
|
||||
// Use the demangler from libc++.
|
||||
extern "C" char* __cxa_demangle(const char*, char*, size_t*, int* status);
|
||||
|
||||
|
@ -491,8 +494,8 @@ static void dump_mappings(Tombstone* tombstone, unwindstack::Maps* maps,
|
|||
}
|
||||
|
||||
static void dump_log_file(Tombstone* tombstone, const char* logger, pid_t pid) {
|
||||
logger_list* logger_list =
|
||||
android_logger_list_open(android_name_to_log_id(logger), ANDROID_LOG_NONBLOCK, 0, pid);
|
||||
logger_list* logger_list = android_logger_list_open(android_name_to_log_id(logger),
|
||||
ANDROID_LOG_NONBLOCK, kMaxLogMessages, pid);
|
||||
|
||||
LogBuffer buffer;
|
||||
|
||||
|
|
Loading…
Reference in a new issue