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

标签 c++ c xcode lldb

我正在使用 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 );
}

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

最佳答案

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

为了它的值(value),你可以在你的 ~/.lldbinit 文件中创建一个别名,比如

command alias det process detach

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

关于c++ - XCode 附加进程/分离进程(以编程方式分离调试器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13488444/

相关文章:

c++ - 使用模板参数的 typedef 不适用于 g++

c - 开发-C++ : 'prinft' undeclared

iPhone - 使用核心数据中的子对象从父表获取数据

ios - 从 Obj-C 中的其他类访问实例方法

iphone - UITabbar 还使用额外的 UIButton [hell] swift 4 更改选项卡

c++ - element_t 数组中的段错误

c++ - 在成员函数中的析构函数之后调用构造函数

c++ - QML 中的 anchors.baseline

c - Malloc 打印不正确?

c - Linux 上的 Termios.h 错误,Windows 上的 -lftdi 错误。交叉编译