Когда я использую lldb в быстром проекте, я не могу изменить значение bool - PullRequest
0 голосов
/ 24 ноября 2018

помогите мне, пожалуйста, я новичок в Swift.

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)

        var flag = false     
        print(" current->  \(flag)") /** Add a breakpoint  **/
        if flag == true {
            print(" after  -> true")
        }else {
            print(" after ->   false")
        }
    }

Я хочу использовать lldb для изменения значения 'flag', поэтому

(lldb) po flag
false

(lldb) expression flag = true
(lldb) po flag
true

(lldb) continue
2018-11-24 23:57:05.552804+0800 test_swift_lldb[6806:384106] XPC connection interrupted
Process 6806 resuming
 current->  false
 after ->   false

Itне кажется полезнымПодскажите пожалуйста, как использовать lldb, измените значение bool.

1 Ответ

0 голосов
/ 25 ноября 2018

Прежде всего, кажется, что это проблема между 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работает вокруг этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...