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

原创 2017年03月03日 12:17:13

通常客户端产品至少都会有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

经验证有效。

XCode调试时, 显示不出变量的值,po也出不来

首先检查运行的scheme是release还是debug. 检查项目的Targets的Build Settings中的Optimization Level其中的debug通常为None, 以使所有的信...
  • smking
  • smking
  • 2015年11月09日 14:38
  • 10793

iOS开发Xcode断点调试技巧

概括的来说断点调试可分为一下3种: 1、普通断点,单步调试 2、条件断点和忽略特定的次数 3、通过LLDB命令来控制断点的行为 示例如下: 1、代码 var j = 10 for i in 1.....
  • xiaonaiping061
  • xiaonaiping061
  • 2016年03月10日 18:04
  • 4355

iOS开发Debug之CocoaPods编辑Podfile失效

问题现象:新版的CocoaPods的vim Podfile编辑之后不好用。 问题原因:新版的coco的vim Podfile格式变了。 解决方法: 原格式: platform :ios,'9.0' p...
  • q1194259339
  • q1194259339
  • 2016年12月01日 09:11
  • 495

关于xcode 断点的设置

编码不能没调试,调试不能没断点(Break Point)。XCode的断点功能也是越来越强大。 基本断点 如下图,这种是最常用的断点,也是最容易设置。左键点击一下就可以设置。 ...
  • shaobo8910
  • shaobo8910
  • 2015年08月17日 20:30
  • 2343

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

通常客户端产品至少都会有Debug和Release两种编译配置,在编译Release版本中会进行一些优化,以减少最终产品的体积。 比如,在Release版本中会对代码执行步骤进行优化(如O1、O2等...
  • jasonblog
  • jasonblog
  • 2017年03月03日 12:17
  • 2553

xcode ios调试 NSLog没有输出 控制台没有输出解决

不能输出可能是模拟器测试久了, 后来发现模拟器菜单中选择选择Reset content and settings后就可以在xcode ouput 中输出了...
  • suirosu
  • suirosu
  • 2016年06月23日 12:09
  • 5651

CocoaPods使用篇-多工程时怎么使用Pods

问题 1 一个项目中,主工程包含了pod子工程,其他静态类库工程,也想引用pod时,怎么办? 目录结构如下: MainProject Pods.xcconfig Pods SubProjec...
  • xxq_2011
  • xxq_2011
  • 2015年06月04日 00:34
  • 2959

项目经理之项目跟踪

项目跟踪要跟踪什么呢?主要针对计划、任务和项目成员三个方面,是为了了解项目的实际进展情况而进行。如了解成员工作完成情况,了解整个项目计划完成情况等内容。      项目跟踪是必要的,因为它可以证明计划...
  • taomanman
  • taomanman
  • 2016年03月02日 13:02
  • 1577

Xcode8真机调试测试NSLog不输出日志

升级Xcode8之后,会打印一些烦人的Log信息,解决的办法就是OS_ACTIVITY_MODE = disable,详细请看 点击打开链接 。 这样做在模拟器上是正常的,但是在iOS10真机测试...
  • luckxing
  • luckxing
  • 2016年10月08日 15:36
  • 13503

Xcode无法调试APP

在开发过程中,有的时候我们会遇到莫名奇妙的问题,如无法调试APP。多数情况看log日志就可以知道问题所在,但是有的时候,不知道问题在什么地方就是没法调试。     本人总结了几种方法,百试百爽。...
  • y550918116j
  • y550918116j
  • 2015年09月23日 18:12
  • 755
收藏助手
不良信息举报
您举报文章:在使用CocoaPod的Xcode工程中断点没有调试信息的问题跟进
举报原因:
原因补充:

(最多只允许输入30个字)