Shims/Shimulator/TestCrashShim/TestCrashShim.m (36 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <Foundation/Foundation.h>
#import "FBDebugLog.h"
static NSString *const ShimulatorCrashAfter = @"SHIMULATOR_CRASH_AFTER";
static void PerformCrashAfter(void)
{
if (!NSProcessInfo.processInfo.environment[ShimulatorCrashAfter]) {
return;
}
NSTimeInterval timeInterval = [NSProcessInfo.processInfo.environment[ShimulatorCrashAfter] doubleValue];
NSLog(@"Forcing crash after %f seconds", timeInterval);
[NSFileManager.defaultManager performSelector:@selector(stringWithFormat:) withObject:@"NOPE" afterDelay:timeInterval];
}
static NSString *ArchName(void)
{
#if TARGET_CPU_ARM64
return @"arm64";
#elif TARGET_CPU_X86_64
return @"x86_64";
#else
return @"not supported");
#endif
}
static void PrintProcessInfo(void)
{
FBDebugLog(@"Architecture %@",ArchName());
NSProcessInfo *processInfo = NSProcessInfo.processInfo;
NSLog(@"Arguments [%@]", [processInfo.arguments componentsJoinedByString:@" "]);
FBDebugLog(@"Environment %@", processInfo.environment);
}
__attribute__((constructor)) static void EntryPoint()
{
NSLog(@"Start of Shimulator");
PrintProcessInfo();
PerformCrashAfter();
NSLog(@"End of Shimulator");
}