从Xcode 10中的自定义“嵌入式框架”“按PID或名称附加到进程”后无法达到断点

时间:2018-10-05 14:08:03

标签: ios xcode debugging

我一直在尝试调试过去几年来一直使用/开发的自定义嵌入式框架的Objective-C代码,而最近(1-2周前)在Xcode 10发行之前,它们都运行良好。我能够使用调试配置构建嵌入式框架,创建一个应用程序(使用NativeScript),将其部署到模拟器中,打开框架的 .xcodeproject ,转到 Debug>附加到处理者PID或名称,选择应用程序并在我的Objective-C代码中添加断点以对其进行调试。

但是今天我试图做同样的事情,断点无法被击中。我知道我的嵌入式框架是在调试配置中构建的,因为存在 .dSYM 文件。同样,在附加了该过程后,如果我使用按钮将其停止,则该应用会在模拟器中停止,因此它必须正确附加。

有人遇到这样的问题吗?

编辑: 我确实通过比较nm -a <lib>this答案的nm <lib>的输出来验证项目中的嵌入式框架是否包含调试符号。

编辑2:

这种情况很简单:

  1. 创建动态嵌入式框架
  2. 构建其.framework和.framework.dSYS文件
  3. 将其添加到项目的嵌入式框架中
  4. 将该项目构建到应用中
  5. 将其部署到模拟器
  6. 打开框架的项目
  7. 将其附加到流程中
  8. 尝试达到断点。

2 个答案:

答案 0 :(得分:0)

将其部署到模拟器时,请尝试停止popCount进程并从Data.Bits手动启动应用程序,然后附加该xcode。有关逐步说明,请参阅此simulatorHow can I debug in a framework in Xcode?

答案 1 :(得分:0)

经过3天的研究和挖掘,我设法解决了这个问题。对我来说,它的来源仍然未知,它看起来像是9.4.1和10之间xcodebuild的某种重大更改,但听起来它可能是非常有意的或是错误修复。

简短答案: 确保与胖库一起使用的.dSYM用于正确的设备(模拟器或真实设备)

TL; DR

所以问题是,当我从xcodebuild的真实设备中获取.dSYM文件时,我在连接至模拟器时使用了错误的.dSYM文件。因此,在我的构建阶段(用bash完成)中的步骤如下:

  • 构建模拟器框架
  • 构建真正的iPhone框架
  • 使用上面创建的.framework文件使用xcrun创建一个胖库
  • 从真实设备位置将.dSYM复制到派生数据中(在XCode 10之后是错误的)

我看到这是不正确的,但是以前在执行“附加到进程”时它从未出现任何问题,但是在XCode 10中,它不再起作用(使用为模拟器创建的调试符号)