comphelper/source/misc/debuggerinfo.cxx |   33 ++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

New commits:
commit 096e28acff82948eef6c5425593f0929c9367a6f
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Aug 20 16:11:04 2021 +0200
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Sun Aug 22 10:57:20 2021 +0200

    make isDebuggerAttached() work on Mac
    
    Change-Id: I1c7c2b58686e7cbb0f8f11327df7ae951226586f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120803
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/comphelper/source/misc/debuggerinfo.cxx 
b/comphelper/source/misc/debuggerinfo.cxx
index 07b2f0132fff..eaa05d37c88c 100644
--- a/comphelper/source/misc/debuggerinfo.cxx
+++ b/comphelper/source/misc/debuggerinfo.cxx
@@ -16,6 +16,10 @@
 #if defined(_WIN32)
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
+#elif defined MACOSX
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
 #elif defined UNX
 #include <unistd.h>
 #include <fcntl.h>
@@ -28,6 +32,35 @@ bool isDebuggerAttached()
 {
 #if defined(_WIN32)
     return IsDebuggerPresent();
+#elif defined MACOSX
+    // https://developer.apple.com/library/archive/qa/qa1361/_index.html
+    int junk;
+    int mib[4];
+    struct kinfo_proc info;
+    size_t size;
+
+    // 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 = sizeof(info);
+    junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
+    assert(junk == 0);
+
+    // We're being debugged if the P_TRACED flag is set.
+
+    return ((info.kp_proc.p_flag & P_TRACED) != 0);
 #elif defined LINUX
     char buf[4096];
     int fd = open("/proc/self/status", O_RDONLY);

Reply via email to