在使用CocoaPod的Xcode工程中断点没有调试信息的问题跟进

  1. 云栖社区>
  2. 博客列表>
  3. 正文

在使用CocoaPod的Xcode工程中断点没有调试信息的问题跟进

思禽 2017-03-06 11:57:00 浏览882 评论1

摘要: 通常客户端产品至少都会有Debug和Release两种编译配置,在编译Release版本中会进行一些优化,以减少最终产品的体积。 比如,在Release版本中会对代码执行步骤进行优化(如O1、O2等),这会导致有些代码被优化省略掉,有时无法单步调试;另外就是会去掉符号信息,这会导致断点调试时没有符号信息,所以才会有[CallStack的捕获和解析内容](http://www.atatech.or

通常客户端产品至少都会有Debug和Release两种编译配置,在编译Release版本中会进行一些优化,以减少最终产品的体积。
比如,在Release版本中会对代码执行步骤进行优化(如O1、O2等),这会导致有些代码被优化省略掉,有时无法单步调试;另外就是会去掉符号信息,这会导致断点调试时没有符号信息,所以才会有CallStack的捕获和解析内容

由于千牛iOS端会有不同版本,分别面向内部开发者、外部ISV以及最终用户。尤其是在集成QAP项目后需要提供一个专门的开发调试版本给QAP开发者,所以新增了一个QAPDistribution Scheme,并且这个Scheme是从Debug Scheme复制过来的,所以按道理是可以进行调试、查看符号信息的。结果在使用这个Scheme进行开发调试的过程中发现符号信息缺失,控制台输出如下信息:

AppName was compiled with optimization - stepping may behave oddly; variables may not be available.

这就给我们排查问题带来不便。虽然可以切换成Debug来调试排查,但由于给ISV的版本不是Debug的,所以环境不一致,可能会导致一些遗漏。于是我再次确认了下编译配置信息:

screenshot.png

确实和Debug是一致的,这就带来了困惑。
后来进一步发现在千牛自身代码中是有符号信息的,但是跟进到Pod依赖中就缺失了,所以怀疑是不是Pod工程的编译配置有问题:

screenshot.png

screenshot.png

发现果然Pods工程的编译配置是有对QAPDistribution Scheme进行优化的。那么问题来了,如果我手动修改一下,之后再进行pod update是不是又会复原?验证了下果然如此,所以只能通过Pod本身的配置来解决问。在网上搜了下,有如下解决方案

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    if config.name.include?("QapDistribution")
      config.build_settings['GCC_OPTIMIZATION_LEVEL'] = '0'
    end
  end
end

screenshot.png

经验证有效。

【云栖快讯】你想见的Java技术专家都在这了,向大佬提问,有问题必答  详情请点击

网友评论

1F
手机阿里云

使用cocoapods这样的三方工具,就会有这样的麻烦。明明知道设置在哪里,还得看cocoapods要怎么设置才行,囧

(来自社区APP)
思禽
文章84篇 | 关注45
关注
一站式提供企业即时通讯、销售管理、协同办公。 查看详情
基于深度学习技术及阿里巴巴多年的海量数据支撑, 提供多样化的内容识别服务,能有效帮助用户降低... 查看详情
移动测试(Mobile Testing)是为广大企业客户和移动开发者提供真机测试服务的云平台... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航