底线问题:是否可以让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偏好设置->位置->派生数据中,我选择了“相对”
  • 转到产品菜单->方案->编辑方案
  • 在“方案编辑”窗口的左侧,默认选择为“运行HelloWorld调试”。在“方案编辑”窗口的右侧,将“自动启动”单选按钮更改为“等待HelloWorld启动”。调试器= LLDB,调试进程为= me
  • 在代码中设置一个或多个断点。
  • 选择产品->运行(或单击播放按钮)。现在,Xcode主窗口显示“正在等待HelloWorld启动”。
  • 打开终端窗口并导航到HelloWorld可执行文件,在我的情况下是.../HelloWorld/DerivedData/HelloWorld/Build/Products/Debug/
  • 使用命令./HelloWord
  • 运行程序

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

    所需的行为,Xcode应该在断点处停止,并允许我逐步执行代码。

    感谢您的帮助或提示。

    最佳答案

    在调试器注意到并附加到您的进程的过程中,该进程的执行已超过断点。要在此设置中从调试器获得确定性的行为,您需要在第一个断点之前暂停过程的执行,并等待调试器连接。一种简单的方法是添加代码以发送STOP信号:

    raise(SIGSTOP);
    

    执行将在此时停止,并且调试器在连接时将自动继续。

    关于c - 从Xcode外部启动应用程序时的Xcode调试断点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19084088/

    10-16 11:02