ChatGPT解决这个技术问题 Extra ChatGPT

“项目名称”是经过优化编译的 - 步进可能会表现得很奇怪;变量可能不可用

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

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

当然,我无法调试代码。具体来说,我正在尝试调试似乎不可能的 UIImageView+AFNetworking 类别。更改代码没有效果(尝试过 NSLog 等),当尝试进入编译器时,编译器会转到汇编代码并将 UIImageView+TVASTAFNetworking 显示为代码库中任何地方都不存在的类别名称。

https://i.stack.imgur.com/P9eUE.png

使用 Xcode 7. iOS 9 & 8. Cocoapods(无框架)

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

https://i.stack.imgur.com/mtoTT.png

更新 2

Strip Debug Symbols 也已关闭。

我记得有某种“条带调试符号”选项。这可能会导致这个问题。关了吗?
@NobodyNada 是的 Strip Debug Symbols 已关闭。
奇怪的是我只是试图打开剥离调试符号,警告消失了 8-|
@Mojtaba 嘿,您找到解决问题的方法了吗?自从更新到 Xcode 7 后,我遇到了同样的问题
@Mojtaba嗨,我陷入了类似的境地,并且尝试了该线程中提到的所有内容,但都是徒劳的。您找到任何解决方案了吗?

A
Albert Bori

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

确保正确设置它们:

在 Project Navigator 窗格中选择您的项目 在“PROJECT”树下选择您的项目设置 单击“Build Settings”选项卡 搜索“Optimization Level”,您将看到两个设置,一个用于 LLVM,一个用于 swift。为有问题的构建配置设置适当的设置(LLVM 为无 [-O0],Swift 为无 [-0none])。

https://i.stack.imgur.com/vyc2n.png

这样做为我解决了这个警告。


混合语言项目...?
LLVM和LLVM有什么区别?迅速? Swift 是我在项目中编写的,而 LLVM 是针对我在调试器中进行调试的任何事情,例如 popexpr ... 之类的东西吗?
I
Iulian Onofrei

看起来您的项目处于发布模式。发布模式编译应用程序时有很多优化,但调试器讨厌优化,因此为了可靠地调试应用程序,您需要将其切换到调试模式,这会减少优化并添加大量调试信息。要将其切换到调试模式:

单击 Xcode 左上角的方案。

https://i.stack.imgur.com/6eHnt.png

选择“编辑方案...”

https://i.stack.imgur.com/fm6vP.png

单击“构建配置”下拉菜单。并将其更改为调试模式。

https://i.stack.imgur.com/855XL.png


我正在使用调试。并确保优化器已关闭。
这很有趣。也因为我将它设置为发布模式,我的一些断点没有被命中,而其他一些断点被命中¯_(ツ)_/¯
m
mfaani

仅当您遇到断点并且源位于启用优化的项目中时才会出现此警告,从而阻止您查看实际变量值(每个对象都显示为 nil,即使它不是)

就我而言,它仅在通过 cocoapod 依赖项逐步调试时发生。

因此,即使您正确设置了主要目标和项目设置(Strip Debug Symbol=OFF,并且优化级别无),您也需要确保它与您从其命中断点的 Pod 项目相同。

https://i.stack.imgur.com/FxLcc.png


阅读其他答案,他们的建议相同。但它们都在我的项目中(又名 None [-O0]
我知道您说它在您的项目中关闭,就像在我的项目中一样,但是您是否查看了您的 Pod 依赖项项目配置?
Xcode 7 也有同样的问题。当我开始使用 trachkerbird 库时,问题可能就出现了。但是断点在我自己的代码中。
对于 Pods 项目,将“PROJECT”优化级别设置更改为 None works。 (任何 pod 目标都没有变化)。
这是不正确的。当您再次 pod install 时,它将被覆盖。更改它like this
v
valvoline

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

https://i.stack.imgur.com/Zpbfg.jpg

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

https://i.stack.imgur.com/4Yn6B.jpg


我做的。不适合我。我在由 Unity 生成的 ios 构建中面临这个问题。
w
wils

这是我的解决方案......

按照 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

除了标准的“调试”之外,MyProject 还具有“调试 - 本地”、“调试 - 暂存”、“调试 - 生产”作为调试配置

默认情况下,cocoapods 通常会生成 pod 配置为 Release,这个 Podfile 行允许你告诉它它们正在调试。


A
Ashish Ahuja

https://i.stack.imgur.com/OmGQ2.png

将调试设置为 None


我做的。不适合我。我在由 Unity 生成的 ios 构建中面临这个问题。
A
Ashish Ahuja

我今天遇到了同样的问题,并弄清楚了(至少在我的情况下)。我也在使用 CocoaPods,并且在运行我的测试目标(Swift 与 ObjC 混合)时遇到了这个问题。

我正在使用带有 iOS 9.2 SDK 的 Xcode 7.2。

在下图中,您可以看到我更改之前对目标和项目的优化:

https://i.stack.imgur.com/GelYY.png

令人惊讶的是,即使解决的优化是无 [-O0],只有在将项目设置从 -Os 更改为 -O0 之后,编译器才停止优化目标。

下面你可以看到我的最终设置:

https://i.stack.imgur.com/JQv8d.png


M
Mojtaba

已经很久了,但我终于解决了这个问题。还有第三个优化标志 LTOLink Time Optimization,令人惊讶的是,这里没有人提到它,出于某种原因,我也没有注意它。正如您在此处发布的许多屏幕截图中看到的那样,它就在 Optimization Level 设置上方。

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

LLVM 链接时间优化 (-flto)

LLVM 优化级别 (-O)

Swift 编译器优化级别

https://i.stack.imgur.com/NeO19.png

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


我做的。不适合我。我在由 Unity 生成的 ios 构建中面临这个问题。
@Chandni,在这里我遇到了同样的问题,您找到解决方案了吗?
A
Al Priest

如果您需要禁用 Swift pod 的优化以便调试它们,请将以下内容添加到您的 Podfile。这将仅禁用调试版本的优化。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == "Debug"
        config.build_settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Onone"
      end
    end
  end
end

C
Can Poyrazoğlu

你确定你的调试配置没有优化代码(它不应该)?看起来您不小心启用了调试配置的优化,您应该从目标的设置中将其关闭。


优化已关闭。甚至发布构建只是为了确保
@Mojtba 但是发布模式会开启优化!
l
le0diaz

这个错误发生在我身上两次,每次都是用于请求服务的 URL 参数中的错误。在一种情况下,URL 在端口部分有一些空间,在另一种情况下,一些可选值没有被解包。

所以解决方法是确保请求的 url 格式正确。关于我的案例的更多信息,以及类似的报告相同here


感谢您的回答。在我的情况下,URL 也不正确。我不必像其他答案所建议的那样更改任何编译器优化设置。
A
Aaron

这可能过于简单化了,但是您是为 Release 构建还是优化(从 Swift 或 LLVM 中删除符号)太高了?如果是这样,请编辑您的方案并切换到调试,或者将您的构建设置编辑为 swift 或 LLVM 优化为无 (0)。


D
Dmitry Serov

万一有人在调试内部使用 C 库的 pod 时遇到此问题,除了线程中列出的所有其他内容之外,您还必须更改项目设置以使其正常工作。

转到 Pods 项目设置 ->您的 C 使用目标 ->构建设置-> Apple Clang - 自定义编译器标志 ->其他 C 标志并删除以某种方式到达那里的 -O3 标志。


N
Nathan Hosselton

就我而言,我为自定义配置(“Mock”)创建了一个新方案,该方案没有使用优化,但忽略了方案的测试和分析上下文,它们仍在使用发布配置(我必须复制最初的发布方案)。

更改这些以使用我的自定义配置删除了运行时优化。

https://i.stack.imgur.com/anj6J.png


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅