Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ XCode附加进程/分离进程(以编程方式分离调试器)_C++_C_Xcode_Lldb - Fatal编程技术网

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

C++ XCode附加进程/分离进程(以编程方式分离调试器),c++,c,xcode,lldb,C++,C,Xcode,Lldb,我正在使用XCode 4.5调试插件,使用信息>启动>等待???启动和调试工作很棒 然而,每次我点击停止按钮或按下播放按钮,我附加插件的应用程序就会被终止(终止:9)。如果我连接到一个进程,播放或停止按钮会将我从该进程中分离,这难道不符合逻辑吗 是否有一种方法可以在Xcode中更改此行为,而不是每次都在lldb控制台>>上键入process detach以使其继续 我想的是在我的主应用程序(我附加XCode的那个)中添加一些代码,添加一段代码来断开调试器的连接,这可能吗 [编辑] 找到确定是否附

我正在使用XCode 4.5调试插件,使用信息>启动>等待???启动和调试工作很棒

然而,每次我点击停止按钮或按下播放按钮,我附加插件的应用程序就会被终止(终止:9)。如果我连接到一个进程,播放或停止按钮会将我从该进程中分离,这难道不符合逻辑吗

是否有一种方法可以在Xcode中更改此行为,而不是每次都在lldb控制台>>上键入process detach以使其继续

我想的是在我的主应用程序(我附加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 );
}

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

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

无论如何,您可以在
~/.lldbinit
文件中创建一个别名,如

command alias det process detach

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

要好。当您在调试器控制台中键入
进程分离
时会发生什么?一切都很好调试在XCode中停止,另一个应用程序继续运行。。。(这正是我想要的,但我习惯于点击这些播放/停止按钮,我无法控制自己,我必须重新启动应用程序…但我想让它继续运行…我所做的应该是“实时”。那看起来是你唯一的选择。这个过程是由你使用Run in Xcode启动的吗?它已经在运行了吗?是的,这没有多大意义。那么我是否可以让我正在运行的应用程序在检测到崩溃时断开lldb连接?