尝试进入AFNetworking代码会生成以下警告:

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

当然,我不能调试代码。具体来说,我试图调试UIImageView+AFNetworking类别,这似乎是不可能的。改变代码没有效果(尝试NSLog等),当尝试进入编译器时,进入汇编代码,并显示UIImageView+TVASTAFNetworking作为类别名称,这在代码库中不存在。

使用Xcode 7。iOS 9和8。Cocoapods(无框架)

更新 我忘了提到,优化器在发布和调试配置中都被设置为none,实际上我正在使用调试配置。

更新2

条带调试符号也关闭。


当前回答

事实证明,在将一个旧项目(Xcode 7.x+)导入到新的Xcode 8.3 (8E162)后,可能是由于编译器优化,Swift编译器优化级别默认设置为快速,单文件优化:

将其更改为none,解决了问题:

其他回答

编辑器->验证设置,然后确认所有更改。那么你应该

将Debug设置为None。

此警告仅在遇到断点但源位于已启用优化的项目中时出现。这阻止了你观察真正的变量值(每个对象都显示为nil,即使它不是)

你在使用CocoaPods吗?

在我的例子中,它只在通过cocoapod依赖项一步一步地调试时发生。

因此,即使你已经正确设置了主目标和项目设置(条带调试符号=OFF,优化级别为None),你需要确保它与你击中断点的Pod项目相同。

为了防止有人在调试内部使用C库的pod时遇到这个问题,除了线程中列出的所有其他内容外,还必须在项目设置中更改另一件事以使其工作。

转到Pods项目设置-> Your C-using target -> Build settings -> Apple Clang - Custom Compiler Flags -> Other C Flags并删除以某种方式获得的- o3标志。

经过很长时间,我终于解决了这个问题。有第三个优化标志LTO或链接时间优化,令人惊讶的是没有人有 我在这里提到过,但出于某种原因,我也没有注意到。它就在优化级别设置的上方,你可以在这里张贴的许多屏幕截图中看到。

总结一下,你需要关闭3个不同的优化标志进行调试:

LLVM链路时间优化(-flto) LLVM优化级别(-O) Swift编译器优化级别

更多关于LTO的信息: http://llvm.org/docs/LinkTimeOptimization.html

如果你的项目使用Swift,在项目/目标配置中有两个单独的“优化级别”设置。

确保你把它们都设置正确:

在project Navigator窗格中选择您的项目 在“project”树下选择项目的设置 点击“构建设置”页签 搜索“优化级别”,你会看到两个设置,一个是LLVM,一个是swift。 为所讨论的构建配置设置适当的设置(LLVM为None [-O0], Swift为None [-0none])。

这样做解决了我的警告。