aboutsummaryrefslogtreecommitdiff
path: root/src/client/mac/Framework
diff options
context:
space:
mode:
authornealsid <nealsid@4c0a9323-5329-0410-9bdc-e9ce6186880e>2009-04-22 06:25:21 +0000
committernealsid <nealsid@4c0a9323-5329-0410-9bdc-e9ce6186880e>2009-04-22 06:25:21 +0000
commit1cb4ad73a6b77f47dbec69dcb5551c16e37d267d (patch)
tree4c6eb90b067656001659b7c4d3a8ec27d1166a4e /src/client/mac/Framework
parentGive the Mac reporter app a localized name of 'Crash Reporter' (diff)
downloadbreakpad-1cb4ad73a6b77f47dbec69dcb5551c16e37d267d.tar.xz
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
Diffstat (limited to 'src/client/mac/Framework')
-rw-r--r--src/client/mac/Framework/Breakpad.h61
-rw-r--r--src/client/mac/Framework/Breakpad.mm16
2 files changed, 62 insertions, 15 deletions
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]);
}
}