From 1cb4ad73a6b77f47dbec69dcb5551c16e37d267d Mon Sep 17 00:00:00 2001 From: nealsid Date: Wed, 22 Apr 2009 06:25:21 +0000 Subject: Fix to support extensible parameter handling, and add process crashtime/uptime support R=stuart morgan A=nealsid git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@331 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/client/mac/Framework/Breakpad.h | 61 ++++++++++++++++++++++++++++-------- src/client/mac/Framework/Breakpad.mm | 16 ++++++++-- 2 files changed, 62 insertions(+), 15 deletions(-) (limited to 'src/client/mac/Framework') diff --git a/src/client/mac/Framework/Breakpad.h b/src/client/mac/Framework/Breakpad.h index 06ce5ae8..4b5357d2 100644 --- a/src/client/mac/Framework/Breakpad.h +++ b/src/client/mac/Framework/Breakpad.h @@ -61,26 +61,33 @@ extern "C" { // Specify some special keys to be used in the configuration file that is // generated by Breakpad and consumed by the crash_sender. -#define BREAKPAD_PRODUCT_DISPLAY "BreakpadProductDisplay" #define BREAKPAD_PRODUCT "BreakpadProduct" -#define BREAKPAD_VENDOR "BreakpadVendor" +#define BREAKPAD_PRODUCT_DISPLAY "BreakpadProductDisplay" #define BREAKPAD_VERSION "BreakpadVersion" +#define BREAKPAD_VENDOR "BreakpadVendor" #define BREAKPAD_URL "BreakpadURL" #define BREAKPAD_REPORT_INTERVAL "BreakpadReportInterval" #define BREAKPAD_SKIP_CONFIRM "BreakpadSkipConfirm" #define BREAKPAD_SEND_AND_EXIT "BreakpadSendAndExit" #define BREAKPAD_DUMP_DIRECTORY "BreakpadMinidumpLocation" #define BREAKPAD_INSPECTOR_LOCATION "BreakpadInspectorLocation" - #define BREAKPAD_REPORTER_EXE_LOCATION \ "BreakpadReporterExeLocation" #define BREAKPAD_LOGFILES "BreakpadLogFiles" #define BREAKPAD_LOGFILE_UPLOAD_SIZE "BreakpadLogFileTailSize" -#define BREAKPAD_LOGFILE_KEY_PREFIX "BreakpadAppLogFile" #define BREAKPAD_EMAIL "BreakpadEmail" #define BREAKPAD_REQUEST_COMMENTS "BreakpadRequestComments" #define BREAKPAD_COMMENTS "BreakpadComments" - +#define BREAKPAD_SERVER_TYPE "BreakpadServerType" +// TODO(nealsid) find a better way to support server-specific +// parameters without having to rebuild Breakpad +#define BREAKPAD_BUILD_ID "BreakpadBuildID" + +// The keys below are NOT user supplied, and are used internally. +#define BREAKPAD_PROCESS_START_TIME "BreakpadProcStartTime" +#define BREAKPAD_PROCESS_UP_TIME "BreakpadProcessUpTime" +#define BREAKPAD_PROCESS_CRASH_TIME "BreakpadProcessCrashTime" +#define BREAKPAD_LOGFILE_KEY_PREFIX "BreakpadAppLogFile" // Optional user-defined function to dec to decide if we should handle // this crash or forward it along. // Return true if you want Breakpad to handle it. @@ -91,9 +98,9 @@ typedef bool (*BreakpadFilterCallback)(int exception_type, int exception_code, mach_port_t crashing_thread); -// Create a new BreakpadRef object and install it as an -// exception handler. The |parameters| will typically be the contents -// of your bundle's Info.plist. +// Create a new BreakpadRef object and install it as an exception +// handler. The |parameters| will typically be the contents of your +// bundle's Info.plist. // // You can also specify these additional keys for customizable behavior: // Key: Value: @@ -153,15 +160,27 @@ typedef bool (*BreakpadFilterCallback)(int exception_type, // well as a name and email address. // Default: NO // -// The BREAKPAD_PRODUCT, BREAKPAD_VERSION, and BREAKPAD_URL are +// BREAKPAD_SERVER_TYPE A parameter that tells Breakpad how to +// rewrite the upload parameters for a specific +// server type. The currently valid values are +// 'socorro' or 'google'. If you want to add +// other types, see the function in +// crash_report_sender.m that maps parameters to +// URL parameters. Defaults to 'google'. +// BREAKPAD_BUILD_ID A string parameter indicating build id. +// Optional. +//============================================================================= +// The BREAKPAD_PRODUCT, BREAKPAD_VERSION and BREAKPAD_URL are // required to have non-NULL values. By default, the BREAKPAD_PRODUCT // will be the CFBundleName and the BREAKPAD_VERSION will be the // CFBundleVersion when these keys are present in the bundle's -// Info.plist. If the BREAKPAD_PRODUCT or BREAKPAD_VERSION are -// ultimately undefined, BreakpadCreate() will fail. You have been -// warned. +// Info.plist, which is usually passed in to BreakpadCreate() as an +// NSDictionary (you could also pass in another dictionary that had +// the same keys configured). If the BREAKPAD_PRODUCT or +// BREAKPAD_VERSION are ultimately undefined, BreakpadCreate() will +// fail. You have been warned. // -// If you are running in a debugger, breakpad will not install, unless the +// If you are running in a debugger, Breakpad will not install, unless the // BREAKPAD_IGNORE_DEBUGGER envionment variable is set and/or non-zero. // // The BREAKPAD_SKIP_CONFIRM and BREAKPAD_SEND_AND_EXIT default @@ -173,6 +192,22 @@ typedef bool (*BreakpadFilterCallback)(int exception_type, // BREAKPAD_REPORTER_EXE_LOCATION allow you to specify custom paths // to the helper executables. // +//============================================================================= +// The following are NOT user-supplied but are documented here for +// completeness. They are calculated by Breakpad during initialization & +// crash-dump generation. +// +// BREAKPAD_PROCESS_START_TIME The time the process started. +// +// BREAKPAD_PROCESS_CRASH_TIME The time the process crashed. +// +// BREAKPAD_PROCESS_UP_TIME The total time the process has been running. +// This parameter is not set until the +// crash-dump-generation phase. +// +// BREAKPAD_LOGFILE_KEY_PREFIX Used to find out which parameters in the +// parameter dictionary correspond to log file +// paths. // Returns a new BreakpadRef object on success, NULL otherwise. BreakpadRef BreakpadCreate(NSDictionary *parameters); diff --git a/src/client/mac/Framework/Breakpad.mm b/src/client/mac/Framework/Breakpad.mm index 65678807..30b8eeab 100644 --- a/src/client/mac/Framework/Breakpad.mm +++ b/src/client/mac/Framework/Breakpad.mm @@ -369,7 +369,6 @@ bool Breakpad::Initialize(NSDictionary *parameters) { new (gBreakpadAllocator->Allocate(sizeof(google_breakpad::ExceptionHandler))) google_breakpad::ExceptionHandler( Breakpad::ExceptionHandlerDirectCallback, this, true); - return true; } @@ -409,6 +408,8 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { [parameters objectForKey:@BREAKPAD_VENDOR]; NSString *dumpSubdirectory = [parameters objectForKey:@BREAKPAD_DUMP_DIRECTORY]; + NSString *buildId = + [parameters objectForKey:@BREAKPAD_BUILD_ID]; // If these two are not already set(skipConfirm and sendAndExit can // come from user defaults and take priority) @@ -547,11 +548,22 @@ bool Breakpad::ExtractParameters(NSDictionary *parameters) { dictionary.SetKeyValue(BREAKPAD_DUMP_DIRECTORY, [dumpSubdirectory UTF8String]); + dictionary.SetKeyValue(BREAKPAD_BUILD_ID, + [buildId UTF8String]); + struct timeval tv; + gettimeofday(&tv, NULL); + char timeStartedString[32]; + sprintf(timeStartedString, "%d", tv.tv_sec); + dictionary.SetKeyValue(BREAKPAD_PROCESS_START_TIME, + timeStartedString); + if (logFilePaths) { char logFileKey[255]; for(unsigned int i = 0; i < [logFilePaths count]; i++) { sprintf(logFileKey,"%s%d", BREAKPAD_LOGFILE_KEY_PREFIX, i); - dictionary.SetKeyValue(logFileKey, [[logFilePaths objectAtIndex:i] fileSystemRepresentation]); + dictionary.SetKeyValue(logFileKey, + [[logFilePaths objectAtIndex:i] + fileSystemRepresentation]); } } -- cgit v1.2.1