【问题标题】:Xcode debugging breakpoints when app is launched from outside of Xcode从 Xcode 外部启动应用程序时的 Xcode 调试断点
【发布时间】:2013-10-05 17:14:17
【问题描述】:

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

--详细说明如下--

我想调试(逐行执行)一个简单的 C 程序,该程序需要在 10.8.5 上使用 Xcode 4.6.3 将文本通过管道输入到标准输入。

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

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

重现问题

  1. 打开 Xcode 4.6.3

  2. 在“Welcome to Xcode”屏幕中选择“Create a new Xcode project”

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

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

  5. 选择项目的位置。

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

  1. 进入产品菜单->方案->编辑方案

  2. 在Scheme Editing窗口的左侧,默认选择的是“Run HelloWorld Debug”。在 Scheme Editing 窗口的右侧,我将 Launch Automatically 单选按钮更改为“等待 HelloWorld 启动”。调试器 = LLDB,调试过程为 = 我

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

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

  5. 打开一个终端窗口并导航到 HelloWorld 可执行文件,在我的例子中是 .../HelloWorld/DerivedData/HelloWorld/Build/Products/Debug/

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

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

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

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

【问题讨论】:

  • 你试过Debugger->Attach to Process吗?
  • 根据您的建议,我尝试了几种打开终端并选择产品 -> 附加到进程 -> 终端的变体。它仍然不会在断点处停止。 “终端”是正确的附加过程吗?当然,HelloWorld 不是列表中的可用进程,HelloWorld 一旦启动,只会在列表中存在一微秒。
  • stackoverflow.com/questions/7629886/…查看我最近对相关问题的回答

标签: c xcode xcode4


【解决方案1】:

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

raise(SIGSTOP);

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

【讨论】:

  • 这看起来很有希望。但是我得到了这些:函数“raise”的隐式声明在 C99 中无效和使用未声明的标识符“SIGSTOP”
  • 您需要#include <signal.h>
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2017-06-20
  • 2011-07-29
  • 2015-10-05
  • 2012-02-27
相关资源
最近更新 更多