【问题标题】:XCode attach process / detach process (Programmatically detach debugger)XCode附加过程/分离过程(以编程方式分离调试器)
【发布时间】:2012-11-09 10:04:32
【问题描述】:

我正在使用 XCode 4.5 调试插件,使用 Info > Launch > Wait for ???启动和调试工作很棒。

但是,每次我点击停止按钮或按下播放按钮时,我附加插件的应用程序都会被杀死(被杀死: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 );
}

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

【问题讨论】:

  • 当您在调试器控制台中键入process detach 时会发生什么?
  • 一切都很好,XCode 中的调试停止和其他应用程序继续运行......(这正是我想要的,但我习惯于点击这些播放/停止按钮,我忍不住我自己和我必须重新启动应用程序......但我想让它继续运行......我所做的应该是“活的”。
  • 那看起来是你唯一的选择。该进程是您在 Xcode 中使用 Run 启动的,它是否已经在运行?
  • 是的,那没有多大意义
  • 无论如何我可以让我正在运行的应用程序在检测到崩溃时断开 lldb 附加到它?

标签: c++ c xcode lldb


【解决方案1】:

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

为了它的价值,你可以在你的 ~/.lldbinit 文件中创建一个别名

command alias det process detach

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2014-11-14
    • 2011-08-15
    • 2017-09-17
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多