“项目名称”是用优化编译的 – 步进可能performance怪异; variables可能不可用
尝试进入AFNetworking代码会产生以下警告:
[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.
当然,我无法debugging代码。 具体来说,我试图debuggingUIImageView+AFNetworking
类似乎不可能。 更改代码没有效果(试过NSLog
等),当试图在编译器中进入汇编代码,并显示UIImageView+TVASTAFNetworking
作为类别名称,它不存在于代码库中的任何地方。
使用Xcode 7. iOS 9和8. Cocoapods(无框架)
更新我忘了提到Optimizer设置为none
,无论是释放和debuggingconfiguration,我实际上使用Debug
configuration。
更新2
Strip Debug Symbols
也是closures的。
如果您的项目使用Swift,那么项目/目标configuration中有两个单独的“优化级别”设置。
确保你正确地设置它们:
- 在“项目导航器”窗格中select您的项目
- 在“PROJECT”树下select您的项目设置
- 点击“Build Settings”标签
- search“优化级别”,你会看到两个设置,一个用于LLVM,另一个用于快速。
- 为相关的构buildconfiguration设置适当的设置(LLVM
None [-O0]
None [-0none]
,SwiftNone [-0none]
。
这样做解决了我的警告。
看起来您的项目处于发行模式。 发布模式编译应用程序有很多优化,但debugging器讨厌优化,所以要可靠地debugging应用程序,您需要切换到debugging模式,这减less了优化,并添加了一堆debugging信息。 要切换到debugging模式:
- 点击Xcode左上angular的scheme。
- select“编辑scheme…”
- 点击“Build Configuration”下拉菜单。 并将其更改为debugging模式。
OK发现问题,这个警告只出现在你遇到一个断点时,源代码在启用了优化的项目中,从而阻止你观察真正的variables值(每个对象显示为零,即使它不是)
在我的情况下,它只发生在逐步debugging通过一个cocoapod依赖关系。
因此,即使您正确设置了主要目标和项目设置(剥离debugging符号= OFF,优化级别无),也需要确保Pod projet与您的断点相同。
Editor
– > Validate Settings
然后确认所有更改。 那么你应该得到
将debugging设置为None
。
原来,在将旧项目(Xcode 7.x +)导入到新的Xcode 8.3(8E162)之后,可能是由于编译器的优化,默认情况下, Swift Compiler – Optimization Level被设置为Fast,Single-File Optimization :
将其更改为无,解决了问题:
这是我的解决scheme…
沿着gimino的答案,如果你正在使用cocoapods,像这样的一行添加到Podfile:
xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug
或cocoapods版本> = 1.0(感谢Diejmon)
project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug
除了标准的“debugging”,MyProject具有“debugging – 本地”,“debugging – 分段”,“debugging – 生产”
默认情况下,cocoapods通常会像Release一样生成podconfiguration,这个Podfile行允许您告诉它们正在debugging。
我今天遇到了同样的问题,并把它弄清楚了(至less在我的情况下)。 我也使用CocoaPods,并且在运行我的testing目标(Swift与ObjC混合)时遇到了这个问题。
我正在使用Xcode 7.2和iOS 9.2 SDK。
在下面的图片中,您可以在更改之前看到目标和项目的优化:
令人惊讶的是,即使已解决的优化是无[-O0] ,只有在将项目设置从-Os更改为-O0之后,编译器才会停止优化目标。
在下面你可以看到我的最终设置:
已经很久了,但我终于解决了这个问题。 有第三个优化标志LTO
或Link Time Optimization
,令人惊讶的是没有人在这里提到它,由于某种原因,我也没有注意到它。 正如您在这里发布的许多屏幕截图中所看到的那样,它就位于Optimization Level
设置的上方。
所以总结一下,有三种不同的优化标志要closures进行debugging:
- LLVM链路时间优化(
-flto
) - LLVM优化级别(
-O
) - Swift编译器优化级别
有关LTO的更多信息: http : //llvm.org/docs/LinkTimeOptimization.html
你确定你的debuggingconfiguration没有优化代码(它不应该)? 看起来你不小心启用了优化debuggingconfiguration,你应该把它从目标的设置closures。
这个错误在我身上发生了两次,并且在每个情况下都是在用于请求一个服务的URL参数上有错误。 在其中一种情况下,URL在端口部分有一些空间,一些可选值没有被解包。
所以修正是为了确保请求的url格式正确。 有关我的案例的更多信息,以及类似的报告在这里相同。
我所做的只是清洁( Product > Clean
)我的项目并再次运行