请帮助我,我是 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
好像没什么用。 请告诉我如何使用lldb,修改bool值。
最佳答案
首先,这似乎是 Swift 和 LLDB 之间的问题。我怀疑 Swift 正在将 var 标志优化到寄存器中。关于类似问题还有其他几个 SO 问题,例如:Why is Xcode's Variables View's “Edit Value” not changing the variable value? 。有趣的是,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 如何解决此问题的见解。
关于swift - 当我在swift项目中使用lldb时,无法修改bool值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53455557/