Add IsDebuggerPresent for macOS and iOS platforms

This commit is contained in:
Wojtek Figat
2023-10-22 15:33:21 +02:00
parent 9fa0b174f5
commit 1280e61af0
2 changed files with 31 additions and 1 deletions

View File

@@ -245,13 +245,40 @@ void ApplePlatform::GetUTCTime(int32& year, int32& month, int32& dayOfWeek, int3
millisecond = time.tv_usec / 1000;
}
#if !BUILD_RELEASE
void ApplePlatform::Log(const StringView& msg)
{
#if !BUILD_RELEASE && !USE_EDITOR
#if !USE_EDITOR
NSLog(@"%s", StringAsANSI<>(*msg, msg.Length()).Get());
#endif
}
bool ApplePlatform::IsDebuggerPresent()
{
// Reference: https://developer.apple.com/library/archive/qa/qa1361/_index.html
int mib[4];
struct kinfo_proc info;
// Initialize the flags so that, if sysctl fails for some bizarre reason, we get a predictable result
info.kp_proc.p_flag = 0;
// Initialize mib, which tells sysctl the info we want, in this case we're looking for information about a specific process ID
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PID;
mib[3] = getpid();
// Call sysctl
size_t size = sizeof(info);
sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
// We're being debugged if the P_TRACED flag is set
return ((info.kp_proc.p_flag & P_TRACED) != 0);
}
#endif
bool ApplePlatform::Init()
{
if (UnixPlatform::Init())

View File

@@ -79,7 +79,10 @@ public:
static uint64 GetClockFrequency();
static void GetSystemTime(int32& year, int32& month, int32& dayOfWeek, int32& day, int32& hour, int32& minute, int32& second, int32& millisecond);
static void GetUTCTime(int32& year, int32& month, int32& dayOfWeek, int32& day, int32& hour, int32& minute, int32& second, int32& millisecond);
#if !BUILD_RELEASE
static void Log(const StringView& msg);
static bool IsDebuggerPresent();
#endif
static bool Init();
static void Tick();
static void BeforeExit();