底线问题:是否有可能让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不会在断点处停止。
重现问题
打开Xcode 4.6.3
在“欢迎使用Xcode”屏幕中选择“创建新的Xcode项目”
在“为新项目选择模板”屏幕中,选择Mac OS X - >申请 - >命令行工具然后单击“下一步”
在“为新项目选择选项:”屏幕中产品名称:HelloWorld,类型:C - >接下来,使用自动引用计数= False
选择项目的位置。
注意:在Xcode偏好设置中 - >地点 - >派生数据,我选择了“相对”
转到产品菜单 - >方案 - >编辑方案
在Scheme Editing窗口的左侧,默认选择“Run HelloWorld Debug”。在“方案编辑”窗口的右侧,我将“自动启动”单选按钮更改为“等待HelloWorld启动”。 Debugger = LLDB,Debug Process As = me
在代码中设置一个或多个断点。
选择产品 - >运行(或单击“播放”按钮)。现在主要的Xcode窗口显示“等待HelloWorld启动”。
打开终端窗口并导航到HelloWorld可执行文件,在我的情况下... / HelloWorld / DerivedData / HelloWorld / Build / Products / Debug /
使用命令./HelloWord
该程序运行并打印Hello,World!正如预期的那样,Xcode说“完成了运行HelloWorld:HelloWorld”。它没有停在任何断点处。
期望的行为,Xcode应该停在断点处并允许我单步执行代码。
感谢您提供任何帮助或提示。
答案 0 :(得分:11)
在调试器注意到并附加到您的流程所花费的时间内,流程的执行已经超过了断点。要在此设置中从调试器获得确定性行为,您需要在第一个断点之前暂停执行流程并等待调试器附加。一种简单的方法是添加代码来发送STOP信号:
raise(SIGSTOP);
执行将在此时停止,调试器将在附加时自动继续。