从Xcode外部启动应用程序时,Xcode调试断点

时间:2013-09-29 22:33:04

标签: c xcode xcode4

底线问题:是否有可能让Xcode等待应用程序启动,然后从Xcode外部启动应用程序,然后让Xcode停在断点处?

- 详细说明如下 -

我想调试(逐行逐行)一个简单的C程序,它需要使用10.8.5上的Xcode 4.6.3将文本传送到stdin。

为了做到这一点,我需要像这样启动程序 $ cat in.txt | ./mysimpleprogram> out.txt 让Xcode调试器在断点处停止。

我按照我在此回答https://stackoverflow.com/a/13006633/2779792中找到的说明进行操作,但Xcode不会在断点处停止。

重现问题

  1. 打开Xcode 4.6.3

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

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

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

  5. 选择项目的位置。

  6. 注意:在Xcode偏好设置中 - >地点 - >派生数据,我选择了“相对”

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

    2. 在Scheme Editing窗口的左侧,默认选择“Run HelloWorld Debug”。在“方案编辑”窗口的右侧,我将“自动启动”单选按钮更改为“等待HelloWorld启动”。 Debugger = LLDB,Debug Process As = me

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

    4. 选择产品 - >运行(或单击“播放”按钮)。现在主要的Xcode窗口显示“等待HelloWorld启动”。

    5. 打开终端窗口并导航到HelloWorld可执行文件,在我的情况下... / HelloWorld / DerivedData / HelloWorld / Build / Products / Debug /

    6. 使用命令./HelloWord

    7. 运行程序

      该程序运行并打印Hello,World!正如预期的那样,Xcode说“完成了运行HelloWorld:HelloWorld”。它没有停在任何断点处。

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

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

1 个答案:

答案 0 :(得分:11)

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

raise(SIGSTOP);

执行将在此时停止,调试器将在附加时自动继续。