Прежде всего, кажется, что это проблема между Swift и LLDB.Я подозреваю, что Swift оптимизирует флаг var в регистр.Есть пара других вопросов SO по аналогичной проблеме, например: Почему «Переменное значение» представления переменных в Xcode не изменяет значение переменной? .Интересно, что Xcode как-то обходит эту проблему.Обходной путь, по-видимому, заключается в том, чтобы «обмануть» LLDB в распознавании переменной, обновленной.Я изменил ваш код следующим образом:
//
// main.swift
// debug_example
//
import Foundation
print("Hello, main")
var flag = false
var debugString = "abcd"
if debugString.count == 0 { flag = true }
print(" current-> \(flag)") /** Add a breakpoint **/
if flag == true {
print(" after -> true")
}else {
print(" after -> false")
}
Ниже приведены упрощенные мои команды LLDB (с отступом на выходе):
lldb main
breakpoint set --line 8
process launch
Process 64052 launched:
po flag
false
ex flag=true
po flag
true
s
Hello, World!
Target 0: (main) stopped.
po flag
false
ex flag=true
po flag
true
thread continue
Resuming thread
current-> true
after -> true
Возможно, кто-то еще может предоставить дополнительную информацию или некоторое представление о том, как Xcodeработает вокруг этого.