Xcode调试:当应用程序从Xcode之外启动时如何设置断点

10

最终问题:是否可以让Xcode等待应用程序启动,然后从Xcode外部启动该应用程序,然后在断点处停止Xcode?

--以下是详细说明--

我想在Mac 10.8.5上使用Xcode 4.6.3逐行调试需要通过stdin输入文本的简单C程序。

为了做到这一点,我需要像这样启动程序:

$ cat in.txt | ./mysimpleprogram > out.txt

并且在Xcode调试器中在断点处停止。

我按照此答案中的说明进行操作:https://dev59.com/Cmsz5IYBdhLWcg3w17fQ#13006633 但Xcode不会在断点处停止。

要重现此问题,请执行以下操作:

  1. 打开Xcode 4.6.3

  2. 在“欢迎来到Xcode”屏幕中选择“创建新的Xcode项目”

  3. 在“选择新项目的模板”屏幕中选择Mac OS X->应用程序->命令行工具,然后单击“下一步”

  4. 在“为新项目选择选项”屏幕中,产品名称:HelloWorld,类型:C->下一步,使用自动引用计数= false

  5. 选择项目的位置。

注意:在Xcode首选项->位置->派生数据中,我已选择“相对”

  1. 转到产品菜单 - >方案->编辑方案

  2. 在默认情况下,在方案编辑窗口的左侧选择“运行HelloWorld Debug”。在方案编辑窗口的右侧,我将“自动启动”单选按钮更改为“等待HelloWorld启动”。调试器= LLDB,调试进程为me

  3. 在代码中设置一个或多个断点。

  4. 选择Product->Run(或单击播放按钮)。现在主Xcode窗口显示“等待HelloWorld启动”。

  • 打开终端窗口并导航到HelloWorld可执行文件,对于我的情况是... /HelloWorld/DerivedData/HelloWorld/Build/Products/Debug/

  • 使用命令 ./HelloWord 运行程序

  • 程序正常运行并打印 "Hello, World!",Xcode显示 "Finished running HelloWorld: HelloWorld"。它没有在任何断点处停止。

    期望的行为是,Xcode应该在断点处停下来,并允许我逐步执行代码。

    感谢您提供任何帮助或提示。


    你尝试过使用“调试器->附加到进程”吗? - BergQuester
    根据您的建议,我尝试了几种打开终端并选择“产品”->“附加到进程”->“终端”的方法。但仍然无法在断点处停止。 “终端”是正确的附加进程吗?当然,HelloWorld不在列表中可用,并且一旦启动,HelloWorld只会在微秒级别存在于列表中。 - Matthew James Briggs
    请查看我最近在 https://dev59.com/Cmsz5IYBdhLWcg3w17fQ#49669712 上针对相关问题所做的回答。 - Konchog
    1个回答

    13

    在调试程序注意到并附加到您的进程所需的时间内,该进程的执行已经超过了断点。要在此设置中使调试器具有确定性行为,您需要在第一个断点之前暂停执行进程,并等待调试器附加。一种简单的方法是添加发送STOP信号的代码:

    raise(SIGSTOP);
    

    当调试器连接时,执行将在此处停止,调试器会自动继续执行。


    这看起来很有前途。然而,我遇到了以下问题:在C99中隐式声明函数'raise'是无效的,并且使用未声明的标识符'SIGSTOP'。 - Matthew James Briggs
    你需要 #include <signal.h> - Matt Stevens

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接