XCode附加进程/分离进程(以编程方式分离调试器)

时间:2012-11-21 07:40:20

标签: c++ c xcode lldb

我使用Info>使用XCode 4.5调试插件启动>等待 ???启动和调试工作很棒。

然而,每当我点击停止按钮或按下播放按钮时,我附加插件的应用程序就会被杀死(已杀死:9)。如果我附加到一个进程,那么播放或停止按钮是否会使我脱离该进程并不是逻辑?

有没有办法可以在Xcode中更改此行为,而不是每次在lldb控制台上键入>>进程分离继续吗?

我想在我的主应用程序中添加一些代码(我附加XCode的代码)来添加一段代码来断开调试器是否可能?

[编辑]

找到此代码以确定是否附加了调试器:

bool debugger_attached( void )
{
    int mib[ 4 ];
    struct kinfo_proc info;
    size_t size;

    info.kp_proc.p_flag = 0;

    mib[0] = CTL_KERN;
    mib[1] = KERN_PROC;
    mib[2] = KERN_PROC_PID;
    mib[3] = getpid();

    size = sizeof( info );

    sysctl( mib, sizeof( mib ) / sizeof( *mib ), &info, &size, NULL, 0 );

    return ( ( info.kp_proc.p_flag & P_TRACED ) != 0 );
}

现在如何从当前进程中分离调试器?

1 个答案:

答案 0 :(得分:1)

我认为从后续评论中已经清楚地知道这种行为--Xcode没有一个简单的GUI手势来分离流程 - 就是今天的工作方式。至少有一个用例,这是正确的行为 - 当你在Mac上进行iOS模拟器进程调试时,Xcode / lldb不直接启动模拟器应用程序 - 它附加到已经启动的进程。在这种情况下,当您按Xcode中的“停止”按钮时,您希望模拟的应用程序停止运行。这是一个用户不知道/不应该知道的实现细节,但行为有一些逻辑。

对于它的价值,您可以在~/.lldbinit文件中添加别名,如

command alias det process detach

现在在调试器控制台中,您只需键入det即可分离。 (或您想要设置的任何别名)。它并不像点击GUI中的按钮那么简单,但它比process detach更好。