in Shims/Shimulator/TestReporterShim/XCTestReporterShim.m [435:469]
static void XCWaitForDebuggerIfNeeded()
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSDictionary<NSString *, NSString *> *env = [[NSProcessInfo processInfo] environment];
BOOL waitForDebugger = [env[kEnv_WaitForDebugger] isEqualToString:@"YES"];
if (waitForDebugger) {
int pid = [[NSProcessInfo processInfo] processIdentifier];
NSString *beginMessage = [NSString stringWithFormat:@"Waiting for debugger to be attached to pid '%d' ...", pid];
dispatch_sync(EventQueue(), ^{
PrintJSON(EventDictionaryWithNameAndContent(
kReporter_Events_BeginStatus,
@{
kReporter_BeginStatus_MessageKey : beginMessage,
kReporter_BeginStatus_LevelKey : @"Info"
}
));
});
// Halt process execution until a debugger is attached
raise(SIGSTOP);
NSString *endMessage = [NSString stringWithFormat:@"Debugger was successfully attached to pid '%d'.", pid];
dispatch_sync(EventQueue(), ^{
PrintJSON(EventDictionaryWithNameAndContent(
kReporter_Events_EndStatus,
@{
kReporter_BeginStatus_MessageKey : endMessage,
kReporter_BeginStatus_LevelKey : @"Info"
}
));
});
}
});
}