Xcode 10.1上的“错误:无法表达IRGen,没有其他错误”的解决方案是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xcode 10.1上的“错误:无法表达IRGen,没有其他错误”的解决方案是什么?相关的知识,希望对你有一定的参考价值。
我们有一个大项目,通过迦太基带来了很多依赖。每当我们尝试查看lldb调试器(p variablename
)中的变量时,它就会给出一个错误:error: Couldn't IRGen expression, no additional error
没有一种解决方法非常好。我们可以使用--no-use-binaries
运行迦太基来解决它,但它使构建需要花费相当长的时间。我们可以在一些变量上使用fr v
,但不是全部。人们通过更改某些Swift目录的权限在以前版本的Xcode中解决了这个问题,但我在Xcode 10.1中找不到相应的目录。我看到有人说改变构建系统来回帮助他,但这对我们没有用。
所以我开始专门搜索Xcode 10.1上的解决方案。有没有其他人发现是什么导致了这个错误,和/或一个很好的解决方案?
我团队中的某个人分享了一个实际可行的解决方案(我不知道他是否发现了它或在其他地方找到它):
在AppDelegate didFinishLaunchingWithOptions
方法的第一行设置断点。将此断点的操作设置为:po application
现在,当您运行应用程序时,调试器将在该断点处暂停,并将在lldb调试器窗格中显示此文本(使用您的应用程序名称而不是Foo):
note: Swift compiler options for Foo conflict with options found in other modules;
Switching to a new expression evaluator for Foo, old $R variables are lost.
然后lldb调试器将正常工作,能够p
和po
变量和expr
表达式。
我不知道它为什么会起作用,但它确实有效,而且可靠!
目前有一个硬性要求,即用于构建源代码的swift编译器版本以及用于调试它的lldb版本必须来自同一工具链。目前,类型的swift调试信息只是内部swift编译器数据结构的序列化。它还取决于本地路径信息,这使得难以四处移动。
更改设计有一个长期的努力,但是现在每次更新工具时都必须重建所有二进制文件,并且不能使用预先构建的二进制文件。
不过,我有点惊讶这会导致日常问题。只有当您从Carthage中提取新来源或更新工具时,才需要进行完全重建。如果你比这更频繁地触发重建,可能没有正确跟踪依赖关系,因此更多的文件正在重建而不是需要?
以上是关于Xcode 10.1上的“错误:无法表达IRGen,没有其他错误”的解决方案是什么?的主要内容,如果未能解决你的问题,请参考以下文章
react-native xcode 10.1“config.h”文件未找到
Xcode 10.1 ViewController.h 与 ViewController.swift