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

翻译 2013年12月04日 15:05:24


这是来自苹果文档的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版

相关文章推荐

iOS联机调试

  • 2012-08-02 11:15
  • 1.88MB
  • 下载

ios联机调试和发布

  • 2013-01-09 15:04
  • 16KB
  • 下载

IOS开发 如何联机调试和发布程序(99$)

必须条件: 99$ (没这个就不用再往下看了) 我的系统是10.5.7   不同版本的系统,可能有点小小的区别 首先登录到 http://developer.apple.com/iphone...

如何联机调试和发布iOS应用程序($99个人版)

同时可以参考 “如何使用iOS开发者授权以及如何申请证书”:http://www.adobe.com/cn/devnet/flash/articles/ios_tutorial_3_pro_cert....

ios如何联机调试与发布程序

在网站:http://www.cocoachina.com/bbs/read.php?tid-7923.html上看到的,先保留一份,总有用得着的时候。 首先登录到 http://develope...

php抓取网站内容,获取通达OA官网最新用户,判断页面是否能访问,php正则

名单显示 li{ font-size:13px; } li.red{ color:#F00;} #mingdan{ margin-left:5px; } <? set_t...

#646 – 在按键按下事件处理程序中判断按键开关状态(Detecting a Key’s Toggle State in a Keypress Handler)

在键盘上,有些键是可以切换状态的开关键,一些常用的开关键为:Caps Lock(大小写开关键), Scroll Lock(滚动锁定键) 和Num Lock(数字键盘开关键)。注意,通常情况下Shift...

ios局域网联机——苹果官方源码之WiTap剖析

在过去的时间里,我一直在考虑的事情是,我该写一篇什么样的文章呢?之前的两篇文章都是先有问题,然后我才有目的的解决问题,现在我的困扰是,我不知道该写什么了呵呵。因为其实,大多数的问题,只要在网上搜索一下...
  • gdyer
  • gdyer
  • 2012-04-11 23:39
  • 342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)