diff options
author | 2018-01-10 06:51:01 +1100 | |
---|---|---|
committer | 2018-01-10 06:51:15 +1100 | |
commit | 1ef11ac752d985df1d30ea7848afd09d5a623914 (patch) | |
tree | 82d7d9312bbc47b8d07407d1ee92bf84c26d547a | |
parent | 31ffaa781921c548e87cb6891b5f088501eeeab2 (diff) |
detect attached debugger on OSX before generating trace/breakpoint trap
-rw-r--r-- | src/osd/modules/lib/osdlib_macosx.cpp | 24 |
1 files 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 <stdlib.h> #include <unistd.h> #include <sys/mman.h> +#include <sys/sysctl.h> #include <sys/types.h> #include <signal.h> #include <dlfcn.h> @@ -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); + } } |