如何在Xcode lldb swift repl中以交互方式玩对象?

如何在Xcode lldb swift repl中以交互方式玩对象?,第1张

概述假设我有一个小程序,涉及从数据库中选择一个文档: let errorDatabase= NSError(domain: "dk.myproject.couchbase", code: 0, userInfo: nil)let rev = database.existingDocumentWithID("_design/" + designDocName)// in xcode I set 假设我有一个小程序,涉及从数据库中选择一个文档:

let errorDatabase= NSError(domain: "dk.myproject.couchbase",code: 0,userInfo: nil)let rev = database.existingdocumentWithID("_design/" + designDocname)// in xcode I set a break point hereassert(rev != nil)if rev == nil {    promise.failure(errorDatabase)}

然后我插入一个断点,运行程序,之后可以执行:

(lldb) po rev0x00007fad21df61c0 {  ObjectiveC.NSObject = {...}}(lldb) print rev.propertIEs["vIEws"](AnyObject?) $R29 = Some {...

完美让我们进入repl并与rev对象一起玩:

(lldb) repl6> revrepl.swift:6:1: error: use of unresolved IDentifIEr 'rev'rev^

我可能对swift repl有错误的期望 – 我期待某种python,nodeJs或scala repl.我可以玩物体等的行为

任何提示?

解决方法 第一次在LLDB中输入repl时,我希望同样的事情,但我很快发现,不幸的是你不能这样做.

事实证明,LLDB中的repl正在顶级注入的模块中运行.因此,您可以在此处的repl中定义顶级对象和函数,然后在“normal”lldb中可见:

(lldb) repl1> func pt() -> CGPoint {2. return CGPointZero3. }4> :(lldb) po pt()(0.0,0.0)

…但反过来却不是这样:你不能在repl中看到你被暂停时的局部变量,因为它们显然不在顶级范围内.

但请注意,您可以在expr表达式中执行赋值.因此,您可以更改局部变量的值,现有对象的属性等,只需说出expr后跟一个赋值 – 并且这确实发生在您暂停的上下文中.

例如,假设我正在创建一个平移边缘手势识别器,我在这一行的断点处暂停:

p.edges = UIRectEdge.Right

现在:

(lldb) th step-over(lldb) expr p.edges = UIRectEdge.left(lldb) continue

现在应用程序正在运行,但是从左侧而不是右侧滑动时手势识别器正常工作.

总结

以上是内存溢出为你收集整理的如何在Xcode lldb swift repl中以交互方式玩对象?全部内容,希望文章能够帮你解决如何在Xcode lldb swift repl中以交互方式玩对象?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1032682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存