在lldb中更改后,false仍然在if语句中求值为true

问题描述 投票:1回答:1

在lldb中将布尔值更改为false后,它仍然评估为true。这是一个简化版本。

=>是一个断点

func getCount(actionWasSuccessful successful: Bool) -> Int {
=>  var count = 0

    // (lldb) po successful (returns true)
    // (lldb) exp successful = false
    // (lldb) po successful (returns false)

    if successful {
=>      count += 1 // breakpoint stops here
    } else {
=>      count = 0 // breakpoint should stop here
    }
    return count
}

let count = getCount(successful: true)
print(count) // returns 1
ios swift lldb
1个回答
3
投票

Swift使用调试信息来玩弄技巧。例如,它保留了向调试器报告的变量的“影子”副本,以解决一旦可以推断它们不再可访问而迅速删除变量这一事实。如果它没有在定义变量的整个块中存在另一个副本,那么当您逐步执行该函数时,许多局部变量将变得不可用。卷影副本保持最新,但lldb目前无法将更改从阴影推送到实际变量。

卷影副本解决了一个相当严重的调试问题,代价是通过调试器更改变量值变得更加困难。从我所听到的来看,解决这个问题的原则性解决方案并非无足轻重。

请使用bugs.swift.org提交有关此内容的错误。这将有助于编译器人员正确地优先考虑这一点。

© www.soinside.com 2019 - 2024. All rights reserved.