AutorÃa | Ultima modificación | Ver Log |
// Copyright 2019 Google
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h"
#include "Crashlytics/Crashlytics/Components/FIRCLSHost.h"
#include "Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h"
#include "Crashlytics/Crashlytics/Handlers/FIRCLSException.h"
#include "Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h"
#include "Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h"
#include "Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h"
#include "Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h"
#include "Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h"
#include <dispatch/dispatch.h>
#include <stdbool.h>
// The purpose of the crash context is to hold values that absolutely must be read and/or written at
// crash time. For robustness against memory corruption, they are protected with guard pages.
// Further, the context is seperated into read-only and read-write sections.
__BEGIN_DECLS
#ifdef __OBJC__
@class FIRCLSInternalReport;
@class FIRCLSSettings;
@class FIRCLSInstallIdentifierModel;
@class FIRCLSFileManager;
#endif
typedef struct {
volatile bool initialized;
volatile bool debuggerAttached;
const char* previouslyCrashedFileFullPath;
const char* logPath;
// Initial report path represents the report path used to initialized the context;
// where non-on-demand exceptions and other crashes will be written.
const char* initialReportPath;
#if CLS_USE_SIGALTSTACK
void* signalStack;
#endif
#if CLS_MACH_EXCEPTION_SUPPORTED
void* machStack;
#endif
FIRCLSBinaryImageReadOnlyContext binaryimage;
FIRCLSExceptionReadOnlyContext exception;
FIRCLSHostReadOnlyContext host;
#if CLS_SIGNAL_SUPPORTED
FIRCLSSignalReadContext signal;
#endif
#if CLS_MACH_EXCEPTION_SUPPORTED
FIRCLSMachExceptionReadContext machException;
#endif
FIRCLSUserLoggingReadOnlyContext logging;
} FIRCLSReadOnlyContext;
typedef struct {
FIRCLSInternalLoggingWritableContext internalLogging;
volatile bool crashOccurred;
FIRCLSBinaryImageReadWriteContext binaryImage;
FIRCLSUserLoggingWritableContext logging;
FIRCLSExceptionWritableContext exception;
} FIRCLSReadWriteContext;
typedef struct {
FIRCLSReadOnlyContext* readonly;
FIRCLSReadWriteContext* writable;
FIRCLSAllocatorRef allocator;
} FIRCLSContext;
typedef struct {
const char* customBundleId;
const char* rootPath;
const char* previouslyCrashedFileRootPath;
const char* sessionId;
const char* betaToken;
bool errorsEnabled;
bool customExceptionsEnabled;
uint32_t maxCustomExceptions;
uint32_t maxErrorLogSize;
uint32_t maxLogSize;
uint32_t maxKeyValues;
} FIRCLSContextInitData;
#ifdef __OBJC__
bool FIRCLSContextInitialize(FIRCLSInternalReport* report,
FIRCLSSettings* settings,
FIRCLSFileManager* fileManager);
#endif
void FIRCLSContextBaseInit(void);
void FIRCLSContextBaseDeinit(void);
bool FIRCLSContextIsInitialized(void);
bool FIRCLSContextHasCrashed(void);
void FIRCLSContextMarkHasCrashed(void);
bool FIRCLSContextMarkAndCheckIfCrashed(void);
__END_DECLS