From 1ef11ac752d985df1d30ea7848afd09d5a623914 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 10 Jan 2018 06:51:01 +1100 Subject: [PATCH] detect attached debugger on OSX before generating trace/breakpoint trap --- src/osd/modules/lib/osdlib_macosx.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/osd/modules/lib/osdlib_macosx.cpp b/src/osd/modules/lib/osdlib_macosx.cpp index ba105007d52..1f6dec46c76 100644 --- a/src/osd/modules/lib/osdlib_macosx.cpp +++ b/src/osd/modules/lib/osdlib_macosx.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -92,13 +93,22 @@ void osd_free_executable(void *ptr, size_t size) void osd_break_into_debugger(const char *message) { - #ifdef MAME_DEBUG - printf("MAME exception: %s\n", message); - printf("Attempting to fall into debugger\n"); - kill(getpid(), SIGTRAP); - #else - printf("Ignoring MAME exception: %s\n", message); - #endif + pid_t const mypid = getpid(); + int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, int(mypid) }; + struct kinfo_proc info; + info.kp_proc.p_flag = 0; + std::size_t infosz = sizeof(info); + sysctl(mib, ARRAY_LENGTH(mib), &info, &infosz, nullptr, 0); + if (info.kp_proc.p_flag & P_TRACED) + { + printf("MAME exception: %s\n", message); + printf("Attempting to fall into debugger\n"); + kill(mypid, SIGTRAP); + } + else + { + printf("Ignoring MAME exception: %s\n", message); + } }