From ed1f6e754a876f435507f5b5267341051ed3adf6 Mon Sep 17 00:00:00 2001 From: nealsid Date: Thu, 23 Apr 2009 07:56:16 +0000 Subject: Code review issue 9002: Add paranoid logging to Inspector & Reporter A=jeremy moskovich R=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@333 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/client/mac/Framework/OnDemandServer.mm | 2 +- src/client/mac/crash_generation/Inspector.mm | 25 +++++++++++++-- src/client/mac/sender/crash_report_sender.m | 46 +++++++++++++++++++++++----- 3 files changed, 61 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/client/mac/Framework/OnDemandServer.mm b/src/client/mac/Framework/OnDemandServer.mm index 32ac1faa..11b126c2 100644 --- a/src/client/mac/Framework/OnDemandServer.mm +++ b/src/client/mac/Framework/OnDemandServer.mm @@ -88,7 +88,7 @@ kern_return_t OnDemandServer::Initialize(const char *server_command, &service_port_); if (kr != KERN_SUCCESS) { - //PRINT_MACH_RESULT(kr, "bootstrap_create_service() : "); + PRINT_MACH_RESULT(kr, "bootstrap_create_service() : "); // perhaps the service has already been created - try to look it up kr = bootstrap_look_up(bootstrap_port, (char*)service_name, &service_port_); diff --git a/src/client/mac/crash_generation/Inspector.mm b/src/client/mac/crash_generation/Inspector.mm index 9ba38538..c61706ca 100644 --- a/src/client/mac/crash_generation/Inspector.mm +++ b/src/client/mac/crash_generation/Inspector.mm @@ -160,8 +160,15 @@ void ConfigFile::WriteFile(const SimpleStringDictionary *configurationParameters sizeof(config_file_path_)); config_file_ = mkstemp(config_file_path_); - if (config_file_ == -1) + if (config_file_ == -1) { + DEBUGLOG(stderr, + "mkstemp(config_file_path_) == -1 (%s)\n", + strerror(errno)); return; + } + else { + DEBUGLOG(stderr, "Writing config file to (%s)\n", config_file_path_); + } has_created_file_ = true; @@ -177,6 +184,10 @@ void ConfigFile::WriteFile(const SimpleStringDictionary *configurationParameters SimpleStringDictionaryIterator iter(dictionary); while ((entry = iter.Next())) { + DEBUGLOG(stderr, + "config: (%s) -> (%s)\n", + entry->GetKey(), + entry->GetValue()); result = AppendConfigString(entry->GetKey(), entry->GetValue()); if (!result) @@ -348,6 +359,7 @@ void Inspector::SetCrashTimeParameters() { bool Inspector::InspectTask() { // keep the task quiet while we're looking at it task_suspend(remote_task_); + DEBUGLOG(stderr, "Suspsended Remote task\n"); NSString *minidumpDir; @@ -375,6 +387,9 @@ bool Inspector::InspectTask() { minidumpDir = [[NSString stringWithUTF8String:minidumpDirectory] stringByExpandingTildeInPath]; } + DEBUGLOG(stderr, + "Writing minidump to directory (%s)\n", + [minidumpDir UTF8String]); MinidumpLocation minidumpLocation(minidumpDir); @@ -393,14 +408,18 @@ bool Inspector::InspectTask() { NSString *minidumpPath = [NSString stringWithFormat:@"%s/%s.dmp", minidumpLocation.GetPath(), minidumpLocation.GetID()]; + DEBUGLOG(stderr, + "minidump path (%s)\n", + [minidumpPath UTF8String]); + bool result = generator.Write([minidumpPath fileSystemRepresentation]); - DEBUGLOG(stderr, "Inspector: finished writing minidump file: %s\n", - [minidumpPath fileSystemRepresentation]); + DEBUGLOG(stderr, "Wrote minidump - %s\n", result ? "OK" : "FAILED"); // let the task continue task_resume(remote_task_); + DEBUGLOG(stderr, "Resumed remote task\n"); return result; } diff --git a/src/client/mac/sender/crash_report_sender.m b/src/client/mac/sender/crash_report_sender.m index 03fc05c2..cb0abb80 100644 --- a/src/client/mac/sender/crash_report_sender.m +++ b/src/client/mac/sender/crash_report_sender.m @@ -39,6 +39,7 @@ #import "crash_report_sender.h" #import "common/mac/GTMLogger.h" + #define kLastSubmission @"LastSubmission" const int kMinidumpFileLengthLimit = 800000; @@ -704,13 +705,13 @@ doCommandBySelector:(SEL)commandSelector { const char *dest = [destString fileSystemRepresentation]; if (rename(src, dest) == 0) { - fprintf(stderr, "Breakpad Reporter: Renamed %s to %s after successful " \ - "upload\n",src, dest); + GTMLoggerInfo(@"Breakpad Reporter: Renamed %s to %s after successful " \ + "upload",src, dest); } else { // can't rename - don't worry - it's not important for users - fprintf(stderr, "Breakpad Reporter: successful upload report ID = %s\n", - reportID ); + GTMLoggerDebug(@"Breakpad Reporter: successful upload report ID = %s\n", + reportID ); } [result release]; } @@ -749,6 +750,11 @@ doCommandBySelector:(SEL)commandSelector { //============================================================================= int main(int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; +#if DEBUG + // Log to stderr in debug builds. + [GTMLogger setSharedLogger:[GTMLogger standardLoggerWithStderr]]; +#endif + GTMLoggerDebug(@"Reporter Launched, argc=%d", argc); // The expectation is that there will be one argument which is the path // to the configuration file if (argc != 2) { @@ -758,11 +764,20 @@ int main(int argc, const char *argv[]) { // Open the file before (potentially) switching to console user int configFile = open(argv[1], O_RDONLY, 0600); + if (configFile == -1) { + GTMLoggerDebug(@"Couldn't open config file %s - %s", + argv[1], + strerror(errno)); + } + // we want to avoid a build-up of old config files even if they // have been incorrectly written by the framework unlink(argv[1]); if (configFile == -1) { + GTMLoggerDebug(@"Couldn't unlink config file %s - %s", + argv[1], + strerror(errno)); exit(1); } @@ -770,6 +785,7 @@ int main(int argc, const char *argv[]) { // Gather the configuration data if (![reporter readConfigurationData]) { + GTMLoggerDebug(@"reporter readConfigurationData failed"); exit(1); } @@ -793,23 +809,37 @@ int main(int argc, const char *argv[]) { struct passwd *pw = getpwnam("nobody"); // If we can't get a non-root uid, don't send the report - if (!pw) + if (!pw) { + GTMLoggerDebug(@"!pw - %s", strerror(errno)); exit(0); + } - if (setgid(pw->pw_gid) == -1) + if (setgid(pw->pw_gid) == -1) { + GTMLoggerDebug(@"setgid(pw->pw_gid) == -1 - %s", strerror(errno)); exit(0); + } - if (setuid(pw->pw_uid) == -1) + if (setuid(pw->pw_uid) == -1) { + GTMLoggerDebug(@"setuid(pw->pw_uid) == -1 - %s", strerror(errno)); exit(0); + } + } + else { + GTMLoggerDebug(@"getuid() !=0 || geteuid() != 0"); } if (okayToSend && shouldSubmitReport) { + GTMLoggerDebug(@"Sending Report"); [reporter report]; + GTMLoggerDebug(@"Report Sent!"); + } else { + GTMLoggerDebug(@"Not sending crash report okayToSend=%d, "\ + "shouldSubmitReport=%d", okayToSend, shouldSubmitReport); } + GTMLoggerDebug(@"Exiting with no errors"); // Cleanup [reporter release]; [pool release]; - return 0; } -- cgit v1.2.1