iOS官网问答:Detecting the Debugger(判断是否处于联机调试)

来源:互联网 发布:电商网站模板源码 编辑:程序博客网 时间:2024/06/10 00:16


这是来自苹果文档的Technical Q&A QA1361 Detecting the Debugger

Q: 我如何判断程序当前是处在联机调试?

A:最好使用以下代码来判断


#include <assert.h>#include <stdbool.h>#include <sys/types.h>#include <unistd.h>#include <sys/sysctl.h>static bool AmIBeingDebugged(void)// Returns true if the current process is being debugged (either// running under the debugger or has a debugger attached post facto).{    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 );}
PS:因为kinfo_proc结构体的定义<定义在sys/sysctl.h中>在__APPLE_API_UNSTABLE中是有条件的,所以尽量少用上述代码调试debug版
原创粉丝点击