This commit is contained in:
Dmitrii Chichuk 2020-04-27 15:46:56 +04:00
Родитель a9f26321a7
Коммит cf01c2f3eb
26 изменённых файлов: 112 добавлений и 254 удалений

Просмотреть файл

@ -3494,6 +3494,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1.5.1;
DEBUG_INFORMATION_FORMAT = dwarf;
@ -3531,6 +3532,7 @@
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1.5.1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";

Просмотреть файл

@ -27,7 +27,7 @@
*/
#import <Foundation/Foundation.h>
#import "CrashReporter.h"
#import "../../Source/CrashReporter.h"
#import <sys/types.h>
#import <sys/sysctl.h>
@ -81,7 +81,7 @@ static void save_crash_report (PLCrashReporter *reporter) {
return;
}
PLCrashReport *report = [[[PLCrashReport alloc] initWithData: data error: &error] autorelease];
PLCrashReport *report = [[PLCrashReport alloc] initWithData: data error: &error];
NSString *text = [PLCrashReportTextFormatter stringValueForCrashReport: report withTextFormat: PLCrashReportTextFormatiOS];
NSLog(@"%@", text);
@ -136,7 +136,6 @@ static bool debugger_should_exit (void) {
}
int main (int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSError *error = nil;
/*
@ -159,9 +158,9 @@ int main (int argc, char *argv[]) {
#else
PLCrashReporterSignalHandlerTypeBSD;
#endif
PLCrashReporterConfig *config = [[[PLCrashReporterConfig alloc] initWithSignalHandlerType: signalHandlerType
symbolicationStrategy: PLCrashReporterSymbolicationStrategyAll] autorelease];
PLCrashReporter *reporter = [[[PLCrashReporter alloc] initWithConfiguration: config] autorelease];
PLCrashReporterConfig *config = [[PLCrashReporterConfig alloc] initWithSignalHandlerType: signalHandlerType
symbolicationStrategy: PLCrashReporterSymbolicationStrategyAll];
PLCrashReporter *reporter = [[PLCrashReporter alloc] initWithConfiguration: config];
/* Save any existing crash report. */
save_crash_report(reporter);
@ -183,9 +182,6 @@ int main (int argc, char *argv[]) {
if (![reporter enableCrashReporterAndReturnError: &error]) {
NSLog(@"Could not enable crash reporter: %@", error);
}
/* Add another stack frame */
stackFrame();
[pool release];
}

Просмотреть файл

@ -117,7 +117,6 @@ static int convert_command (int argc, char *argv[]) {
}
int main (int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int ret = 0;
if (argc < 2) {
@ -132,7 +131,5 @@ int main (int argc, char *argv[]) {
print_usage();
ret = 1;
}
[pool release];
exit(ret);
}

Просмотреть файл

@ -51,7 +51,7 @@
* fetching the host info, nil will be returned.
*/
+ (instancetype) currentHostInfo {
return [[[self alloc] init] autorelease];
return [[self alloc] init];
}
/*
@ -100,10 +100,9 @@ error:
if (val == NULL) {
/* This should never fail; if it does, either malloc failed, or 'kern.osrelease' disappeared. */
NSLog(@"Failed to fetch kern.osrelease value %d: %s", errno, strerror(errno));
[self release];
return nil;
}
NSString *osrelease = [[[NSString alloc] initWithBytesNoCopy: val length: strlen(val) encoding: NSUTF8StringEncoding freeWhenDone: YES] autorelease];
NSString *osrelease = [[NSString alloc] initWithBytesNoCopy: val length: strlen(val) encoding: NSUTF8StringEncoding freeWhenDone: YES];
/* Since this is best-effort, we ignore parse failures; unparseable elements will be defaulted to '0' */
parse_osrelease(osrelease, &_darwinVersion);

Просмотреть файл

@ -339,7 +339,7 @@ plcrash_error_t plcrash_log_writer_init (plcrash_log_writer_t *writer,
writer->process_info.parent_process_id = pinfo.parentProcessID;
/* Retrieve name. This will fail on iOS 9+, where EPERM is returned due to new sandbox constraints. */
PLCrashProcessInfo *parentInfo = [[[PLCrashProcessInfo alloc] initWithProcessID: pinfo.parentProcessID] autorelease];
PLCrashProcessInfo *parentInfo = [[PLCrashProcessInfo alloc] initWithProcessID: pinfo.parentProcessID];
if (parentInfo != nil) {
if (parentInfo.processName != nil) {
writer->process_info.parent_process_name = strdup([parentInfo.processName UTF8String]);

Просмотреть файл

@ -76,7 +76,7 @@
return nil;
}
return [[[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: states] autorelease];
return [[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: states];
}
/**
@ -110,7 +110,7 @@
return nil;
}
return [[[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: states] autorelease];
return [[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: states];
}
/**
@ -151,8 +151,6 @@
if (MACH_PORT_VALID(_port) && (kt = mach_port_mod_refs(mach_task_self(), _port, MACH_PORT_RIGHT_SEND, -1)) != KERN_SUCCESS) {
NSLog(@"Unexpected error incrementing mach port reference: %d", kt);
}
[super dealloc];
}
/**
@ -189,8 +187,7 @@
}
if (ports != NULL)
*ports = [[[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: prev] autorelease];
*ports = [[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: prev];
return YES;
}
@ -228,7 +225,7 @@
}
if (ports != NULL)
*ports = [[[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: prev] autorelease];
*ports = [[PLCrashMachExceptionPortSet alloc] initWithAsyncSafeRepresentation: prev];
return YES;
}

Просмотреть файл

@ -58,7 +58,7 @@
return nil;
NSAssert([set count] <= EXC_TYPES_COUNT, @"Set size of %lu exceeds EXC_TYPES_COUNT (%lu)", (unsigned long)[set count], (unsigned long)EXC_TYPES_COUNT);
_state_set = [set retain];
_state_set = set;
/* Initialize the async-safe C representation (using borrowed port references) */
plcrash_mach_exception_port_set_t port_set;
@ -94,10 +94,10 @@
kern_return_t kt;
NSMutableSet *stateResult = [NSMutableSet setWithCapacity: states->count];
for (mach_msg_type_number_t i = 0; i < states->count; i++) {
PLCrashMachExceptionPort *state = [[[PLCrashMachExceptionPort alloc] initWithServerPort: states->ports[i]
PLCrashMachExceptionPort *state = [[PLCrashMachExceptionPort alloc] initWithServerPort: states->ports[i]
mask: states->masks[i]
behavior: states->behaviors[i]
flavor: states->flavors[i]] autorelease];
flavor: states->flavors[i]];
[stateResult addObject: state];
/* The state instance increments the refcount, and we acquire ownership of the caller's refcount */
@ -106,20 +106,14 @@
}
}
_state_set = [stateResult retain];
_state_set = stateResult;
_asyncSafeRepresentation = asyncSafeRepresentation;
return self;
}
- (void) dealloc {
[_state_set release];
[super dealloc];
}
// from NSFastEnumeration protocol
- (NSUInteger) countByEnumeratingWithState: (NSFastEnumerationState *) state objects: (id *) stackbuf count: (NSUInteger) len {
- (NSUInteger) countByEnumeratingWithState: (NSFastEnumerationState *) state objects: (id __unsafe_unretained _Nullable [_Nonnull]) stackbuf count: (NSUInteger) len {
return [_state_set countByEnumeratingWithState: state objects: stackbuf count: len];
}

Просмотреть файл

@ -283,8 +283,6 @@ struct plcrash_exception_server_context {
free(_serverContext);
_serverContext = NULL;
[self release];
return nil;
}
@ -294,8 +292,6 @@ struct plcrash_exception_server_context {
pthread_mutex_destroy(&_serverContext->lock);
free(_serverContext);
_serverContext = NULL;
[self release];
return nil;
}
@ -305,8 +301,6 @@ struct plcrash_exception_server_context {
kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &_serverContext->server_port);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to allocate exception server's port");
[self release];
return nil;
}
@ -316,16 +310,12 @@ struct plcrash_exception_server_context {
kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &_serverContext->notify_port);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to allocate exception server's port");
[self release];
return nil;
}
kr = mach_port_insert_right(mach_task_self(), _serverContext->notify_port, _serverContext->notify_port, MACH_MSG_TYPE_MAKE_SEND);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to add send right to exception server's port");
[self release];
return nil;
}
@ -333,8 +323,6 @@ struct plcrash_exception_server_context {
kr = mach_port_request_notification(mach_task_self(), _serverContext->server_port, MACH_NOTIFY_NO_SENDERS, 1, _serverContext->notify_port, MACH_MSG_TYPE_MAKE_SEND_ONCE, &prev_notify_port);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to request MACH_NOTIFY_NO_SENDERS on the exception server's port");
[self release];
return nil;
}
@ -344,8 +332,7 @@ struct plcrash_exception_server_context {
kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_PORT_SET, &_serverContext->port_set);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to allocate exception server's port set");
[self release];
return nil;
}
@ -353,8 +340,7 @@ struct plcrash_exception_server_context {
kr = mach_port_move_member(mach_task_self(), _serverContext->server_port, _serverContext->port_set);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to add exception server port to port set");
[self release];
return nil;
}
@ -362,8 +348,7 @@ struct plcrash_exception_server_context {
kr = mach_port_move_member(mach_task_self(), _serverContext->notify_port, _serverContext->port_set);
if (kr != KERN_SUCCESS) {
plcrash_populate_mach_error(outError, kr, @"Failed to add exception server notify port to port set");
[self release];
return nil;
}
@ -371,8 +356,7 @@ struct plcrash_exception_server_context {
{
if (pthread_attr_init(&attr) != 0) {
plcrash_populate_posix_error(outError, errno, @"Failed to initialize pthread_attr");
[self release];
return nil;
}
@ -384,8 +368,7 @@ struct plcrash_exception_server_context {
if (pthread_create(&thr, &attr, &exception_server_thread, _serverContext) != 0) {
plcrash_populate_posix_error(outError, errno, @"Failed to create exception server thread");
pthread_attr_destroy(&attr);
[self release];
return nil;
}
@ -471,10 +454,10 @@ struct plcrash_exception_server_context {
/* Create the port oject */
PLCrashMachExceptionPort *result;
result = [[[PLCrashMachExceptionPort alloc] initWithServerPort: port
result = [[PLCrashMachExceptionPort alloc] initWithServerPort: port
mask: mask
behavior: PLCRASH_DEFAULT_BEHAVIOR
flavor: MACHINE_THREAD_STATE] autorelease];
flavor: MACHINE_THREAD_STATE];
/* Drop our send right */
mach_port_deallocate(mach_task_self(), port);
@ -813,7 +796,6 @@ static void *exception_server_thread (void *arg) {
mach_msg_return_t mr;
if (_serverContext == NULL) {
[super dealloc];
return;
}
@ -858,8 +840,6 @@ static void *exception_server_thread (void *arg) {
/* Once we've been signaled by the background thread, it will no longer access exc_context */
free(_serverContext);
[super dealloc];
}
@end

Просмотреть файл

@ -59,7 +59,7 @@
* will be fetched once, and the returned instance is immutable.
*/
+ (instancetype) currentProcessInfo {
return [[[self alloc] initWithProcessID: getpid()] autorelease];
return [[self alloc] initWithProcessID: getpid()];
}
/**
@ -87,8 +87,6 @@
if (sysctl(process_info_mib, sizeof(process_info_mib)/sizeof(process_info_mib[0]), &process_info, &process_info_len, NULL, 0) != 0) {
if (errno == ENOENT)
PLCF_DEBUG("Unexpected sysctl error %d: %s", errno, strerror(errno));
[self release];
return nil;
}
@ -126,11 +124,6 @@
return self;
}
- (void) dealloc {
[_processName release];
[super dealloc];
}
@end
/**

Просмотреть файл

@ -114,53 +114,53 @@ static void populate_nserror (NSError **error, PLCrashReporterError code, NSStri
/* Machine info */
if (_decoder->crashReport->machine_info != NULL) {
_machineInfo = [[self extractMachineInfo: _decoder->crashReport->machine_info error: outError] retain];
_machineInfo = [self extractMachineInfo: _decoder->crashReport->machine_info error: outError];
if (!_machineInfo)
goto error;
}
/* System info */
_systemInfo = [[self extractSystemInfo: _decoder->crashReport->system_info processorInfo: _machineInfo.processorInfo error: outError] retain];
_systemInfo = [self extractSystemInfo: _decoder->crashReport->system_info processorInfo: _machineInfo.processorInfo error: outError];
if (!_systemInfo)
goto error;
/* Application info */
_applicationInfo = [[self extractApplicationInfo: _decoder->crashReport->application_info error: outError] retain];
_applicationInfo = [self extractApplicationInfo: _decoder->crashReport->application_info error: outError];
if (!_applicationInfo)
goto error;
/* Process info. Handle missing info gracefully -- it is only included in v1.1+ crash reports. */
if (_decoder->crashReport->process_info != NULL) {
_processInfo = [[self extractProcessInfo: _decoder->crashReport->process_info error:outError] retain];
_processInfo = [self extractProcessInfo: _decoder->crashReport->process_info error:outError];
if (!_processInfo)
goto error;
}
/* Signal info */
_signalInfo = [[self extractSignalInfo: _decoder->crashReport->signal error: outError] retain];
_signalInfo = [self extractSignalInfo: _decoder->crashReport->signal error: outError];
if (!_signalInfo)
goto error;
/* Mach exception info */
if (_decoder->crashReport->signal != NULL && _decoder->crashReport->signal->mach_exception != NULL) {
_machExceptionInfo = [[self extractMachExceptionInfo: _decoder->crashReport->signal->mach_exception error: outError] retain];
_machExceptionInfo = [self extractMachExceptionInfo: _decoder->crashReport->signal->mach_exception error: outError];
if (!_machExceptionInfo)
goto error;
}
/* Thread info */
_threads = [[self extractThreadInfo: _decoder->crashReport error: outError] retain];
_threads = [self extractThreadInfo: _decoder->crashReport error: outError];
if (!_threads)
goto error;
/* Image info */
_images = [[self extractImageInfo: _decoder->crashReport error: outError] retain];
_images = [self extractImageInfo: _decoder->crashReport error: outError];
if (!_images)
goto error;
/* Exception info, if it is available */
if (_decoder->crashReport->exception != NULL) {
_exceptionInfo = [[self extractExceptionInfo: _decoder->crashReport->exception error: outError] retain];
_exceptionInfo = [self extractExceptionInfo: _decoder->crashReport->exception error: outError];
if (!_exceptionInfo)
goto error;
}
@ -168,21 +168,20 @@ static void populate_nserror (NSError **error, PLCrashReporterError code, NSStri
return self;
error:
[self release];
return nil;
}
- (void) dealloc {
/* Free the data objects */
[_systemInfo release];
[_machineInfo release];
[_applicationInfo release];
[_processInfo release];
[_signalInfo release];
[_machExceptionInfo release];
[_threads release];
[_images release];
[_exceptionInfo release];
_systemInfo = NULL;
_machineInfo = NULL;
_applicationInfo = NULL;
_processInfo = NULL;
_signalInfo = NULL;
_machExceptionInfo = NULL;
_threads = NULL;
_images = NULL;
_exceptionInfo = NULL;
if (_uuid != NULL)
CFRelease(_uuid);
@ -196,8 +195,6 @@ error:
free(_decoder);
_decoder = NULL;
}
[super dealloc];
}
/**
@ -359,12 +356,12 @@ error:
}
/* Done */
return [[[PLCrashReportSystemInfo alloc] initWithOperatingSystem: (PLCrashReportOperatingSystem) systemInfo->operating_system
return [[PLCrashReportSystemInfo alloc] initWithOperatingSystem: (PLCrashReportOperatingSystem) systemInfo->operating_system
operatingSystemVersion: [NSString stringWithUTF8String: systemInfo->os_version]
operatingSystemBuild: osBuild
architecture: (PLCrashReportArchitecture) systemInfo->architecture
processorInfo: processorInfo
timestamp: timestamp] autorelease];
timestamp: timestamp];
}
/**
@ -379,9 +376,9 @@ error:
return nil;
}
return [[[PLCrashReportProcessorInfo alloc] initWithTypeEncoding: (PLCrashReportProcessorTypeEncoding) processorInfo->encoding
return [[PLCrashReportProcessorInfo alloc] initWithTypeEncoding: (PLCrashReportProcessorTypeEncoding) processorInfo->encoding
type: processorInfo->type
subtype: processorInfo->subtype] autorelease];
subtype: processorInfo->subtype];
}
/**
@ -428,9 +425,9 @@ error:
return nil;
}
return [[[PLCrashReportProcessorInfo alloc] initWithTypeEncoding: PLCrashReportProcessorTypeEncodingMach
return [[PLCrashReportProcessorInfo alloc] initWithTypeEncoding: PLCrashReportProcessorTypeEncodingMach
type: processorType
subtype: processorSubtype] autorelease];
subtype: processorSubtype];
}
/**
@ -460,10 +457,10 @@ error:
}
/* Done */
return [[[PLCrashReportMachineInfo alloc] initWithModelName: model
return [[PLCrashReportMachineInfo alloc] initWithModelName: model
processorInfo: processorInfo
processorCount: machineInfo->processor_count
logicalProcessorCount: machineInfo->logical_processor_count] autorelease];
logicalProcessorCount: machineInfo->logical_processor_count];
}
/**
@ -507,9 +504,9 @@ error:
NSString *identifier = [NSString stringWithUTF8String: applicationInfo->identifier];
NSString *version = [NSString stringWithUTF8String: applicationInfo->version];
return [[[PLCrashReportApplicationInfo alloc] initWithApplicationIdentifier: identifier
return [[PLCrashReportApplicationInfo alloc] initWithApplicationIdentifier: identifier
applicationVersion: version
applicationMarketingVersion:marketingVersion] autorelease];
applicationMarketingVersion:marketingVersion];
}
@ -552,13 +549,13 @@ error:
NSUInteger parentProcessID = processInfo->parent_process_id;
/* Done */
return [[[PLCrashReportProcessInfo alloc] initWithProcessName: processName
return [[PLCrashReportProcessInfo alloc] initWithProcessName: processName
processID: processID
processPath: processPath
processStartTime: startTime
parentProcessName: parentProcessName
parentProcessID: parentProcessID
native: processInfo->native] autorelease];
native: processInfo->native];
}
/**
@ -574,9 +571,9 @@ error:
}
NSString *name = [NSString stringWithUTF8String: symbol->name];
return [[[PLCrashReportSymbolInfo alloc] initWithSymbolName: name
return [[PLCrashReportSymbolInfo alloc] initWithSymbolName: name
startAddress: symbol->start_address
endAddress: symbol->has_end_address ? symbol->end_address : 0] autorelease];
endAddress: symbol->has_end_address ? symbol->end_address : 0];
}
/**
@ -598,8 +595,8 @@ error:
return NULL;
}
return [[[PLCrashReportStackFrameInfo alloc] initWithInstructionPointer: stackFrame->pc
symbolInfo: symbolInfo] autorelease];
return [[PLCrashReportStackFrameInfo alloc] initWithInstructionPointer: stackFrame->pc
symbolInfo: symbolInfo];
}
/**
@ -643,16 +640,16 @@ error:
return nil;
}
regInfo = [[[PLCrashReportRegisterInfo alloc] initWithRegisterName: [NSString stringWithUTF8String: reg->name]
registerValue: reg->value] autorelease];
regInfo = [[PLCrashReportRegisterInfo alloc] initWithRegisterName: [NSString stringWithUTF8String: reg->name]
registerValue: reg->value];
[registers addObject: regInfo];
}
/* Create the thread info instance */
PLCrashReportThreadInfo *threadInfo = [[[PLCrashReportThreadInfo alloc] initWithThreadNumber: thread->thread_number
PLCrashReportThreadInfo *threadInfo = [[PLCrashReportThreadInfo alloc] initWithThreadNumber: thread->thread_number
stackFrames: frames
crashed: thread->crashed
registers: registers] autorelease];
registers: registers];
[threadResult addObject: threadInfo];
}
@ -702,11 +699,11 @@ error:
}
imageInfo = [[[PLCrashReportBinaryImageInfo alloc] initWithCodeType: codeType
imageInfo = [[PLCrashReportBinaryImageInfo alloc] initWithCodeType: codeType
baseAddress: image->base_address
size: image->size
name: [NSString stringWithUTF8String: image->name]
uuid: uuid] autorelease];
uuid: uuid];
[images addObject: imageInfo];
}
@ -762,11 +759,11 @@ error:
}
if (frames == nil) {
return [[[PLCrashReportExceptionInfo alloc] initWithExceptionName: name reason: reason] autorelease];
return [[PLCrashReportExceptionInfo alloc] initWithExceptionName: name reason: reason];
} else {
return [[[PLCrashReportExceptionInfo alloc] initWithExceptionName: name
return [[PLCrashReportExceptionInfo alloc] initWithExceptionName: name
reason: reason
stackFrames: frames] autorelease];
stackFrames: frames];
}
}
@ -804,7 +801,7 @@ error:
NSString *name = [NSString stringWithUTF8String: signalInfo->name];
NSString *code = [NSString stringWithUTF8String: signalInfo->code];
return [[[PLCrashReportSignalInfo alloc] initWithSignalName: name code: code address: signalInfo->address] autorelease];
return [[PLCrashReportSignalInfo alloc] initWithSignalName: name code: code address: signalInfo->address];
}
/**
@ -836,7 +833,7 @@ error:
}
/* Done */
return [[[PLCrashReportMachExceptionInfo alloc] initWithType: machExceptionInfo->type codes: codes] autorelease];
return [[PLCrashReportMachExceptionInfo alloc] initWithType: machExceptionInfo->type codes: codes];
}
@end

Просмотреть файл

@ -49,20 +49,13 @@
if ((self = [super init]) == nil)
return nil;
_applicationIdentifier = [applicationIdentifier retain];
_applicationVersion = [applicationVersion retain];
_applicationMarketingVersion = [applicationMarketingVersion retain];
_applicationIdentifier = applicationIdentifier;
_applicationVersion = applicationVersion;
_applicationMarketingVersion = applicationMarketingVersion;
return self;
}
- (void) dealloc {
[_applicationIdentifier release];
[_applicationVersion release];
[_applicationMarketingVersion release];
[super dealloc];
}
@synthesize applicationIdentifier = _applicationIdentifier;
@synthesize applicationVersion = _applicationVersion;
@synthesize applicationMarketingVersion = _applicationMarketingVersion;

Просмотреть файл

@ -61,8 +61,8 @@
_baseAddress = baseAddress;
_imageSize = size;
_imageName = [name retain];
_processorInfo = [processorInfo retain];
_imageName = name;
_processorInfo = processorInfo;
if (uuid != nil) {
_hasImageUUID = YES;
@ -89,12 +89,4 @@
return self;
}
- (void) dealloc {
[_processorInfo release];
[_imageName release];
[_imageUUID release];
[super dealloc];
}
@end

Просмотреть файл

@ -58,19 +58,11 @@
if ((self = [super init]) == nil)
return nil;
_name = [name retain];
_reason = [reason retain];
_stackFrames = [stackFrames retain];
_name = name;
_reason = reason;
_stackFrames = stackFrames;
return self;
}
- (void) dealloc {
[_name release];
[_reason release];
[_stackFrames release];
[super dealloc];
}
@end

Просмотреть файл

@ -44,14 +44,9 @@
return nil;
_type = type;
_codes = [codes retain];
_codes = codes;
return self;
}
- (void) dealloc {
[_codes release];
[super dealloc];
}
@end

Просмотреть файл

@ -61,19 +61,12 @@
if ((self = [super init]) == nil)
return nil;
_modelName = [modelName retain];
_processorInfo = [processorInfo retain];
_modelName = modelName;
_processorInfo = processorInfo;
_processorCount = processorCount;
_logicalProcessorCount = logicalProcessorCount;
return self;
}
- (void) dealloc {
[_modelName release];
[_processorInfo release];
[super dealloc];
}
@end

Просмотреть файл

@ -61,25 +61,17 @@
if ((self = [super init]) == nil)
return nil;
_processName = [processName retain];
_processName = processName;
_processID = processID;
_processPath = [processPath retain];
_processStartTime = [processStartTime retain];
_parentProcessName = [parentProcessName retain];
_processPath = processPath;
_processStartTime = processStartTime;
_parentProcessName = parentProcessName;
_parentProcessID = parentProcessID;
_native = native;
return self;
}
- (void) dealloc {
[_processName release];
[_processPath release];
[_processStartTime release];
[_parentProcessName release];
[super dealloc];
}
@synthesize processName = _processName;
@synthesize processID = _processID;
@synthesize processPath = _processPath;

Просмотреть файл

@ -41,17 +41,12 @@
if ((self = [super init]) == nil)
return nil;
_registerName = [registerName retain];
_registerName = registerName;
_registerValue = registerValue;
return self;
}
- (void) dealloc {
[_registerName release];
[super dealloc];
}
@synthesize registerName = _registerName;
@synthesize registerValue = _registerValue;

Просмотреть файл

@ -41,19 +41,13 @@
if ((self = [super init]) == nil)
return nil;
_name = [name retain];
_code = [code retain];
_name = name;
_code = code;
_address = address;
return self;
}
- (void) dealloc {
[_name release];
[_code release];
[super dealloc];
}
@synthesize name = _name;
@synthesize code = _code;
@synthesize address = _address;

Просмотреть файл

@ -47,15 +47,8 @@
return nil;
_instructionPointer = instructionPointer;
_symbolInfo = [symbolInfo retain];
_symbolInfo = symbolInfo;
return self;
}
- (void) dealloc {
[_symbolInfo release];
[super dealloc];
}
@end

Просмотреть файл

@ -52,17 +52,11 @@
if ((self = [super init]) == nil)
return nil;
_symbolName = [symbolName retain];
_symbolName = symbolName;
_startAddress = startAddress;
_endAddress = endAddress;
return self;
}
- (void) dealloc {
[_symbolName release];
[super dealloc];
}
@end

Просмотреть файл

@ -147,23 +147,15 @@ PLCrashReportArchitecture PLCrashReportHostArchitecture =
return nil;
_operatingSystem = operatingSystem;
_osVersion = [operatingSystemVersion retain];
_osBuild = [operatingSystemBuild retain];
_osVersion = operatingSystemVersion;
_osBuild = operatingSystemBuild;
_architecture = architecture;
_processorInfo = [processorInfo retain];
_timestamp = [timestamp retain];
_processorInfo = processorInfo;
_timestamp = timestamp;
return self;
}
- (void) dealloc {
[_osVersion release];
[_osBuild release];
[_timestamp release];
[_processorInfo release];
[super dealloc];
}
@synthesize operatingSystem = _operatingSystem;
@synthesize operatingSystemVersion = _osVersion;
@synthesize operatingSystemBuild = _osBuild;

Просмотреть файл

@ -182,8 +182,7 @@ static NSInteger binaryImageSort(id binary1, id binary2, void *context);
NSString *incidentIdentifier = @"???";
if (report.uuidRef != NULL) {
incidentIdentifier = (NSString *) CFUUIDCreateString(NULL, report.uuidRef);
[incidentIdentifier autorelease];
incidentIdentifier = (NSString *) CFBridgingRelease(CFUUIDCreateString(NULL, report.uuidRef));
}
[text appendFormat: @"Incident Identifier: %@\n", incidentIdentifier];

Просмотреть файл

@ -47,19 +47,13 @@
return nil;
_threadNumber = threadNumber;
_stackFrames = [stackFrames retain];
_stackFrames = stackFrames;
_crashed = crashed;
_registers = [registers retain];
_registers = registers;
return self;
}
- (void) dealloc {
[_stackFrames release];
[_registers release];
[super dealloc];
}
@synthesize threadNumber = _threadNumber;
@synthesize stackFrames = _stackFrames;
@synthesize crashed = _crashed;

Просмотреть файл

@ -608,16 +608,18 @@ static PLCrashReporter *sharedReporter = nil;
return NO;
/* Enable the server. */
_machServer = [self enableMachExceptionServerWithPreviousPortSet: &_previousMachPorts
id prevMacPorts = [_previousMachPorts copy];
_machServer = [self enableMachExceptionServerWithPreviousPortSet: &prevMacPorts
callback: &mach_exception_callback
context: &signal_handler_context
error: outError];
_previousMachPorts = prevMacPorts;
if (_machServer == nil)
return NO;
/* Acquire references to the autoreleased values */
[_machServer retain];
[_previousMachPorts retain];
__strong id machServer = _machServer;
__strong id prevMacPortsStrong = _previousMachPorts;
/*
* MEMORY WARNING: To ensure that our instance survives for the lifetime of the callback registration,
@ -625,7 +627,7 @@ static PLCrashReporter *sharedReporter = nil;
* survive for the lifetime of the callback. Since there's currently no support for *deregistering* a crash reporter,
* this simply results in the reporter living forever.
*/
[self retain];
__strong id strong_self = self;
/*
* Save the previous ports. There's a race condition here, in that an exception that is delivered before (or during)
@ -858,17 +860,17 @@ cleanup:
return nil;
/* Save the configuration */
_config = [configuration retain];
_applicationIdentifier = [applicationIdentifier retain];
_applicationVersion = [applicationVersion retain];
_applicationMarketingVersion = [applicationMarketingVersion retain];
_config = configuration;
_applicationIdentifier = applicationIdentifier;
_applicationVersion = applicationVersion;
_applicationMarketingVersion = applicationMarketingVersion;
/* No occurances of '/' should ever be in a bundle ID, but just to be safe, we escape them */
NSString *appIdPath = [applicationIdentifier stringByReplacingOccurrencesOfString: @"/" withString: @"_"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDir = [paths objectAtIndex: 0];
_crashReportDirectory = [[[cacheDir stringByAppendingPathComponent: PLCRASH_CACHE_DIR] stringByAppendingPathComponent: appIdPath] retain];
_crashReportDirectory = [[cacheDir stringByAppendingPathComponent: PLCRASH_CACHE_DIR] stringByAppendingPathComponent: appIdPath];
return self;
}
@ -892,7 +894,6 @@ cleanup:
const char *progname = getprogname();
if (progname == NULL) {
[NSException raise: PLCrashReporterException format: @"Can not determine process identifier or process name"];
[self release];
return nil;
}
@ -959,7 +960,7 @@ cleanup:
/* Create the server */
NSError *osError;
PLCrashMachExceptionServer *server = [[[PLCrashMachExceptionServer alloc] initWithCallBack: callback context: context error: &osError] autorelease];
PLCrashMachExceptionServer *server = [[PLCrashMachExceptionServer alloc] initWithCallBack: callback context: context error: &osError];
if (server == nil) {
plcrash_populate_error(outError, PLCrashReporterErrorOperatingSystem, @"Failed to instantiate the Mach exception server.", osError);
return nil;
@ -983,21 +984,6 @@ cleanup:
#endif /* PLCRASH_FEATURE_MACH_EXCEPTIONS */
- (void) dealloc {
[_config release];
#if PLCRASH_FEATURE_MACH_EXCEPTIONS
[_machServer release];
[_previousMachPorts release];
#endif /* PLCRASH_FEATURE_MACH_EXCEPTIONS */
[_crashReportDirectory release];
[_applicationIdentifier release];
[_applicationVersion release];
[_applicationMarketingVersion release];
[super dealloc];
}
/**
* Map the configuration defined @a strategy to the backing plcrash_async_symbol_strategy_t representation.

Просмотреть файл

@ -43,7 +43,7 @@
* Return the default local configuration.
*/
+ (instancetype) defaultConfiguration {
return [[[self alloc] init] autorelease];
return [[self alloc] init];
}
/**

Просмотреть файл

@ -290,7 +290,6 @@ static PLCrashSignalHandler *sharedHandler;
/* (Unlikely) malloc failure */
if (_sigstk.ss_sp == NULL) {
[self release];
return nil;
}