草庐IT

ios - Xcode 6.1 'Swift REPL built into the Xcode debugger can inspect and manipulate your running app' 不工作

coder 2023-09-03 原文

对于 Xcode 6.1,更新点之一是:

Swift REPL built into the Xcode debugger can inspect and manipulate your running app

我创建了一个空项目,在 viewDidLoad 中设置了一个断点,当应用程序在断点处停止时,我在 Xcode 控制台中输入“repl”,然后尝试使用

println(self)

但是 Xcode 给我错误:

error: use of unresolved identifier 'self'

但它不起作用。

问题是:我做错了什么?

最佳答案

事实证明,在 lldb 中实际上有两个 Swift 表达式求值器,repl 和常规 expression 命令。两者在重要方面有所不同。

repl 命令评估代码的方式与常规 swift 编译器的评估方式相同,如果将其输入到导入到当前运行的应用程序中的新 Swift 模块文件中。实际上,更准确地说,每次连续调用 repl 都会将代码添加到这样的模块中,并且 repl 会添加一些强大的功能,例如能够重新定义 Swift 编译器不允许的类。所以它对于定义全新的类、函数等是最有用的。让 repl 使用这个全局上下文也是必要的,因为 Swift 中的一些定义只能在模块级别执行,而 repl 使您可以访问该语言的所有这些功能。 OTOH,根据定义,这几乎意味着 repl 命令对您运行 repl 命令的上下文没有可见性。

expression 命令计算代码,就好像它在您当前停止的函数的上下文中运行一样。这很有用,因为它使您可以访问 ivars 和局部变量,并且实际上就像可能在该特定上下文中的代码。但是执行该技巧的一个副作用是它不能完全像制作一个新模块一样——这正是 repl 应该模仿的。请注意,您在 expr 中不能做的事情相当深奥,您通常可以在 expression 命令中构建临时类等。您想使用 expr 来运行您的 println(self) 命令。

简而言之,如果您想在调试时编写新类等,请使用 repl 命令,但如果您想访问局部变量等,请使用 expr

请注意,让事情稍微有点困惑,repl 实际上是一种 flavor 或 expr。如果您查看 repl 的 lldb 帮助,它会告诉您该命令是 expression -r -- 的别名。有些人还使用另一个别名:print,即expression --。在将您的真实表达式输入命令时,该别名非常方便关闭选项解析...

关于ios - Xcode 6.1 'Swift REPL built into the Xcode debugger can inspect and manipulate your running app' 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26493356/

有关ios - Xcode 6.1 'Swift REPL built into the Xcode debugger can inspect and manipulate your running app' 不工作的更多相关文章

随机推荐