hsa*_*rya 7 debugging xcode ios swift xcode6.1
对于Xcode 6.1,其中一个更新点是:
Xcode调试器中内置的Swift REPL可以检查和操作正在运行的应用程序
我创建了空项目,在viewDidLoad中设置断点,当app在断点处停止时,我在Xcode控制台中键入'repl',然后尝试打印自己的
println(self)
Run Code Online (Sandbox Code Playgroud)
但是Xcode给了我错误:
错误:使用未解析的标识符'self'
但它不起作用.
问题是:我做错了什么?
Jim*_*ham 17
事实证明,在lldb repl和常规expression命令中实际上有两个表达式评估器用于Swift .这两者在重要方面有所不同.
repl如果在导入当前正在运行的应用程序的新Swift模块文件中输入,该命令将评估代码作为常规swift编译器.实际上,为了更准确,每次连续调用都会repl向这样的模块添加代码,而repl会添加一些强大的功能,例如能够重新定义Swift编译器不允许的类.因此,它对于定义全新的类,函数等非常有用.repl使用此全局上下文也是必要的,因为Swift中的某些定义只能在模块级别执行,并repl允许您访问该语言的所有这些功能.OTOH,这意味着repl命令几乎无法查看运行repl命令的上下文.
该expression命令将代码评估为在当前停止的函数的上下文中运行.这很有用,因为它使您可以访问ivars和局部变量,并且实际上就像在特定上下文中的代码一样.但是,执行该技巧的一个副作用是它不能完全像制作一个新模块 - 这repl是应该模仿的.注意,你不能做的事情expr是相当深奥的,你可以经常逃脱在expression命令中构建临时类等.您想用来expr运行println(self)命令.
简而言之,如果要在调试时修改新类等,请使用该repl命令,但如果要访问局部变量等,请使用expr.
注意让事情稍微混乱,repl实际上是一种味道或expr.如果你看一下llb帮助repl它会告诉你命令是别名expression -r --.有些人还用另一个别名:print,这是expression --.该别名对于在命令中输入真实表达式时关闭选项解析非常方便...
| 归档时间: |
|
| 查看次数: |
1977 次 |
| 最近记录: |