【问题标题】:Why lldb change Swift's temp var does not work?为什么 lldb 更改 Swift 的 temp var 不起作用?
【发布时间】:2021-07-02 09:49:32
【问题描述】:

有一个临时变量tmp 作为NSObject 实例, 我添加了一个断点,它在打印操作之前执行express tmp = nil,我可以在变量列表中看到这个tmp 真的变成了nil

但是,它仍然打印旧的NSObject 实例,为什么?

【问题讨论】:

  • 它可能已经优化(注意“never mutated”警告),或者在执行断点时已经准备好下一条指令。有没有影响到你的真实例子?
  • 例如,我想在ObjC中测试一些代码,然后我写了类似“BOOL test = NO; if (test) { // dosomething }”,并下一个断点来改变测试的值变成YES,就会执行测试代码。

标签: swift lldb


【解决方案1】:

由于技术原因与 swift 如何解决“安全”语言之间的冲突有关只能通过制作(从其角度)变量的只读副本并将调试器指向该变量来向 lldb 呈现“始终可用”的局部变量。所以在很多情况下,调试器不知道正在使用的变量版本在哪里,而对调试器副本的更改不会影响程序的执行。

这就是你在这里看到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2013-07-15
    • 2015-08-17
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多