Index: client/mac/crash_generation/Inspector.mm |
=================================================================== |
--- client/mac/crash_generation/Inspector.mm (revision 963) |
+++ client/mac/crash_generation/Inspector.mm (working copy) |
@@ -257,19 +257,38 @@ |
"dump generation.", parameters_read, info.parameter_count); |
return KERN_FAILURE; |
} |
+ |
+ if (config_params_.GetValueForKey(BREAKPAD_HAS_EXTRA_LOG)) { |
+ |
+ NSString *minidumpDir = MinidumpDirectory(); |
+ |
+ MinidumpLocation minidumpLocation(minidumpDir); |
+ NSString *logFilePath = MinidumpFile(&minidumpLocation, @"log"); |
+ |
+ MachReceiveMessage ool_message; |
+ result = receive_port.WaitForMessage(&ool_message, 1000); |
+ if(result == KERN_SUCCESS) { |
+ MachMsgOOLDescriptor *desc = |
+ (MachMsgOOLDescriptor*)ool_message.GetDescriptor(0); |
+ FILE *crash_log = fopen([logFilePath UTF8String], "w"); |
+ fprintf(crash_log, "%s", desc->address); |
+ fclose(crash_log); |
+ |
+ NSString *logFileKey = [NSString stringWithFormat:@"%@0", |
jeremy
2012/05/21 07:42:33
Since we only currently have one log file, I don't
|
+ @BREAKPAD_LOGFILE_KEY_PREFIX]; |
+ |
+ config_params_.SetKeyValue([logFileKey UTF8String], |
+ [logFilePath UTF8String]); |
+ } |
+ } |
} |
return result; |
} |
//============================================================================= |
-bool Inspector::InspectTask() { |
- // keep the task quiet while we're looking at it |
- task_suspend(remote_task_); |
- DEBUGLOG(stderr, "Suspended Remote task\n"); |
- |
+NSString *Inspector::MinidumpDirectory() { |
NSString *minidumpDir; |
- |
const char *minidumpDirectory = |
config_params_.GetValueForKey(BREAKPAD_DUMP_DIRECTORY); |
@@ -299,26 +318,43 @@ |
minidumpDir = [[NSString stringWithUTF8String:minidumpDirectory] |
stringByExpandingTildeInPath]; |
} |
- DEBUGLOG(stderr, |
- "Writing minidump to directory (%s)\n", |
- [minidumpDir UTF8String]); |
+ return minidumpDir; |
+} |
- MinidumpLocation minidumpLocation(minidumpDir); |
- |
+//============================================================================= |
+NSString *Inspector::MinidumpFile(MinidumpLocation *minidumpLocation, |
+ NSString *extension) { |
// Obscure bug alert: |
// Don't use [NSString stringWithFormat] to build up the path here since it |
// assumes system encoding and in RTL locales will prepend an LTR override |
// character for paths beginning with '/' which fileSystemRepresentation does |
// not remove. Filed as rdar://6889706 . |
NSString *path_ns = [NSString |
- stringWithUTF8String:minidumpLocation.GetPath()]; |
+ stringWithUTF8String:minidumpLocation->GetPath()]; |
NSString *pathid_ns = [NSString |
- stringWithUTF8String:minidumpLocation.GetID()]; |
+ stringWithUTF8String:minidumpLocation->GetID()]; |
NSString *minidumpPath = [path_ns stringByAppendingPathComponent:pathid_ns]; |
minidumpPath = [minidumpPath |
- stringByAppendingPathExtension:@"dmp"]; |
- |
+ stringByAppendingPathExtension:extension]; |
+ return minidumpPath; |
+} |
+ |
+//============================================================================= |
+bool Inspector::InspectTask() { |
+ // keep the task quiet while we're looking at it |
+ task_suspend(remote_task_); |
+ DEBUGLOG(stderr, "Suspended Remote task\n"); |
+ |
+ NSString *minidumpDir = MinidumpDirectory(); |
+ |
DEBUGLOG(stderr, |
+ "Writing minidump to directory (%s)\n", |
+ [minidumpDir UTF8String]); |
+ |
+ MinidumpLocation minidumpLocation(minidumpDir); |
+ NSString *minidumpPath = MinidumpFile(&minidumpLocation, @"dmp"); |
+ |
+ DEBUGLOG(stderr, |
"minidump path (%s)\n", |
[minidumpPath UTF8String]); |