【发布时间】:2018-04-19 18:58:53
【问题描述】:
我遇到了一些我似乎无法通过阅读 Xcode 或 LLDB 的文档来解决的问题。当应用程序到达具有断点的行时,在我看来,如果存在断点,LLDB 应该在该行中断。如果在执行变异函数时访问该行上的代码不会触发断点。
考虑以下示例:
class DataSource {
private init(){
data = []
for i in 0..<10 {
data.append(i) // mutating func
}
}
static let sharedInstance = DataSource()
var data: [Int]! // Set a breakpoint on this line
}
class Worker {
func work(){
print("Append item")
DataSource.sharedInstance.data.append(23) // mutating func
print("Get first item")
print(DataSource.sharedInstance.data[0]) // subscript - TRIGGERS BREAKPOINT
print("Drop first")
print(DataSource.sharedInstance.data.dropFirst()) // func - TRIGGERS BREAKPOINT
print("Remove first")
print(DataSource.sharedInstance.data.removeFirst()) // mutating func
print("Remove at 0")
print(DataSource.sharedInstance.data.remove(at: 0)) // mutating func
}
}
.data[0] 和.dropFirst() 正在触发断点,其他函数调用没有。我能看到的唯一区别是那些没有破坏的函数是mutating函数。
虽然没有触发断点,但每次都会触发在同一行添加的观察点。
有人可以解释一下这种行为吗?
【问题讨论】:
标签: ios swift xcode debugging lldb