194 строки
6.6 KiB
Objective-C
194 строки
6.6 KiB
Objective-C
/*
|
|
* Author: Landon Fuller <landonf@plausiblelabs.com>
|
|
*
|
|
* Copyright (c) 2008-2013 Plausible Labs Cooperative, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person
|
|
* obtaining a copy of this software and associated documentation
|
|
* files (the "Software"), to deal in the Software without
|
|
* restriction, including without limitation the rights to use,
|
|
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following
|
|
* conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be
|
|
* included in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#ifndef PLCRASH_REPORT_H
|
|
#define PLCRASH_REPORT_H
|
|
|
|
#if __has_include(<CrashReporter/PLCrashReportApplicationInfo.h>)
|
|
#import <CrashReporter/PLCrashReportApplicationInfo.h>
|
|
#import <CrashReporter/PLCrashReportBinaryImageInfo.h>
|
|
#import <CrashReporter/PLCrashReportExceptionInfo.h>
|
|
#import <CrashReporter/PLCrashReportMachineInfo.h>
|
|
#import <CrashReporter/PLCrashReportMachExceptionInfo.h>
|
|
#import <CrashReporter/PLCrashReportProcessInfo.h>
|
|
#import <CrashReporter/PLCrashReportProcessorInfo.h>
|
|
#import <CrashReporter/PLCrashReportRegisterInfo.h>
|
|
#import <CrashReporter/PLCrashReportSignalInfo.h>
|
|
#import <CrashReporter/PLCrashReportStackFrameInfo.h>
|
|
#import <CrashReporter/PLCrashReportSymbolInfo.h>
|
|
#import <CrashReporter/PLCrashReportSystemInfo.h>
|
|
#import <CrashReporter/PLCrashReportThreadInfo.h>
|
|
#else
|
|
#import "PLCrashReportApplicationInfo.h"
|
|
#import "PLCrashReportBinaryImageInfo.h"
|
|
#import "PLCrashReportExceptionInfo.h"
|
|
#import "PLCrashReportMachineInfo.h"
|
|
#import "PLCrashReportMachExceptionInfo.h"
|
|
#import "PLCrashReportProcessInfo.h"
|
|
#import "PLCrashReportProcessorInfo.h"
|
|
#import "PLCrashReportRegisterInfo.h"
|
|
#import "PLCrashReportSignalInfo.h"
|
|
#import "PLCrashReportStackFrameInfo.h"
|
|
#import "PLCrashReportSymbolInfo.h"
|
|
#import "PLCrashReportSystemInfo.h"
|
|
#import "PLCrashReportThreadInfo.h"
|
|
#endif
|
|
|
|
/**
|
|
* @ingroup constants
|
|
* Crash file magic identifier */
|
|
#define PLCRASH_REPORT_FILE_MAGIC "plcrash"
|
|
|
|
/**
|
|
* @ingroup constants
|
|
* Crash format version byte identifier. Will not change outside of the introduction of
|
|
* an entirely new crash log format. */
|
|
#define PLCRASH_REPORT_FILE_VERSION 1
|
|
|
|
/**
|
|
* @ingroup types
|
|
* Crash log file header format.
|
|
*
|
|
* Crash log files start with 7 byte magic identifier (#PLCRASH_REPORT_FILE_MAGIC),
|
|
* followed by a single unsigned byte version number (#PLCRASH_REPORT_FILE_VERSION).
|
|
* The crash log message format itself is extensible, so this version number will only
|
|
* be incremented in the event of an incompatible encoding or format change.
|
|
*/
|
|
struct PLCrashReportFileHeader {
|
|
/** Crash log magic identifier, not NULL terminated */
|
|
const char magic[7];
|
|
|
|
/** Crash log encoding/format version */
|
|
const uint8_t version;
|
|
|
|
/** File data */
|
|
const uint8_t data[];
|
|
} __attribute__((packed));
|
|
|
|
|
|
/**
|
|
* @internal
|
|
* Private decoder instance variables (used to hide the underlying protobuf parser).
|
|
*/
|
|
typedef struct _PLCrashReportDecoder _PLCrashReportDecoder;
|
|
|
|
@interface PLCrashReport : NSObject
|
|
|
|
- (id) initWithData: (NSData *) encodedData error: (NSError **) outError;
|
|
|
|
- (PLCrashReportBinaryImageInfo *) imageForAddress: (uint64_t) address;
|
|
|
|
/**
|
|
* System information.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportSystemInfo *systemInfo;
|
|
|
|
/**
|
|
* YES if machine information is available.
|
|
*/
|
|
@property(nonatomic, readonly) BOOL hasMachineInfo;
|
|
|
|
/**
|
|
* Machine information. Only available in later (v1.1+) crash report format versions. If not available,
|
|
* will be nil.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportMachineInfo *machineInfo;
|
|
|
|
/**
|
|
* Application information.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportApplicationInfo *applicationInfo;
|
|
|
|
/**
|
|
* YES if process information is available.
|
|
*/
|
|
@property(nonatomic, readonly) BOOL hasProcessInfo;
|
|
|
|
/**
|
|
* Process information. Only available in later (v1.1+) crash report format versions. If not available,
|
|
* will be nil.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportProcessInfo *processInfo;
|
|
|
|
/**
|
|
* Signal information. This provides the signal and signal code of the fatal signal.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportSignalInfo *signalInfo;
|
|
|
|
/**
|
|
* Mach exception information, if available. This will only be included in the
|
|
* case that encoding crash reporter's exception-based reporting was enabled, and a Mach
|
|
* exception was caught.
|
|
*
|
|
* @warning If Mach exception information is available, the legacy signalInfo property will also be provided; this
|
|
* s required to maintain backwards compatibility with the established API. Note, however, that the signal info may be derived from the
|
|
* Mach exception info by the encoding crash reporter, and thus may not exactly match the kernel exception-to-signal
|
|
* mappings implemented in xnu. As such, when Mach exception info is available, its use should be preferred.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportMachExceptionInfo *machExceptionInfo;
|
|
|
|
/**
|
|
* Thread information. Returns a list of PLCrashReportThreadInfo instances.
|
|
*/
|
|
@property(nonatomic, readonly, strong) NSArray *threads;
|
|
|
|
/**
|
|
* Binary image information. Returns a list of PLCrashReportBinaryImageInfo instances.
|
|
*/
|
|
@property(nonatomic, readonly, strong) NSArray *images;
|
|
|
|
/**
|
|
* YES if exception information is available.
|
|
*/
|
|
@property(nonatomic, readonly) BOOL hasExceptionInfo;
|
|
|
|
/**
|
|
* Exception information. Only available if a crash was caused by an uncaught exception,
|
|
* otherwise nil.
|
|
*/
|
|
@property(nonatomic, readonly, strong) PLCrashReportExceptionInfo *exceptionInfo;
|
|
|
|
/**
|
|
* Custom user data. Only available if user explicitly assigned it before crash happened,
|
|
* otherwise nil.
|
|
*/
|
|
@property(nonatomic, readonly, strong) NSData *customData;
|
|
|
|
/**
|
|
* A client-generated 16-byte UUID. May be used to filter duplicate reports submitted or generated
|
|
* by a single client. Only available in later (v1.2+) crash report format versions. If not available,
|
|
* will be NULL.
|
|
*/
|
|
@property(nonatomic, readonly) CFUUIDRef uuidRef;
|
|
|
|
@end
|
|
|
|
#endif
|