在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
Swift使用调试信息来玩弄技巧。例如,它保留了向调试器报告的变量的“影子”副本,以解决一旦可以推断它们不再可访问而迅速删除变量这一事实。如果它没有在定义变量的整个块中存在另一个副本,那么当您逐步执行该函数时,许多局部变量将变得不可用。卷影副本保持最新,但lldb目前无法将更改从阴影推送到实际变量。
卷影副本解决了一个相当严重的调试问题,代价是通过调试器更改变量值变得更加困难。从我所听到的来看,解决这个问题的原则性解决方案并非无足轻重。
请使用bugs.swift.org提交有关此内容的错误。这将有助于编译器人员正确地优先考虑这一点。