2013-09-29 40 views
10

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

--detailed描述below--

我想调试一个简单的C程序,需要文本中使用的Xcode 4.6.3上10.8标准输入到通过管道输送(通过线由行步骤)。 5。

为了做到这一点,我需要启动这样的程序 $ 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. 在”C为您的新项目选择:“screen Product Name:HelloWorld,Type:C - > Next,使用自动引用计数= False

  5. 为项目选择一个位置。

注:在Xcode中设置 - >位置 - >导出数据,我已经选择了 “相对”

  • 转到产品菜单 - >计划 - >编辑方案

  • 在方案编辑窗口的左侧,默认选中是“运行HelloWorld调试”。在Scheme编辑窗口的右侧,我将自动启动单选按钮更改为“等待HelloWorld启动”。调试器= LLDB,调试过程As = me

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

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

  • 打开一个终端窗口并导航到HelloWorld可执行文件,在我的情况... /的HelloWorld/DerivedData /的HelloWorld /建设/产品/调试/

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

  • 该程序运行和打印你好,世界!正如预期的那样,Xcode表示“完成正在运行的HelloWorld:HelloWorld”。它并没有停在任何一个断点上。

    期望的行为,Xcode应该停在断点处,让我逐步完成代码。

    谢谢你的任何帮助或提示。

    +0

    您是否尝试过'Debugger-> Attach to Process'? – BergQuester

    +0

    根据您的建议,我尝试了一些打开终端并选择产品 - >附加到过程 - >终端的变体。它仍然停留在断点处。 “终端”是否属于正确的过程?当然,HelloWorld不是列表中可用的进程,HelloWorld一旦启动就只会在列表中存在一微秒。 –

    回答

    11

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

    raise(SIGSTOP); 
    

    执行将停止在这一点上,当它附加调试器将自动继续。

    +0

    这看起来很有前途。然而,我得到这些:隐式声明函数'raise'在C99中是无效的,并且使用未声明的标识符'SIGSTOP' –

    +0

    您需要'#include '。 –

    +0

    太棒了。这工作。我有很多要学习的。 –

    相关问题