Hello,
Just created a bug (bugreport #24106425) for lldb.
lldb unable to print variable from breakpoint, while printing same variable from code (print statement) is working as expected.
Sample code below have the several asynchronous branches of code.
Setting breakpoints on every line where print statement is used and printing contents of variable someValue (po someValue) cause at least two lldb errors:
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x81000).
The process has been returned to the state before expression evaluation.
class ViewController: UIViewController {
private lazy var session = NSURLSession.sharedSession()
private lazy var operationQueue: NSOperationQueue = {
let queue = NSOperationQueue()
queue.maxConcurrentOperationCount = 1
queue.qualityOfService = .UserInitiated
return queue
}()
@IBAction private func performSayHello() {
let task = session.dataTaskWithURL(NSURL(string: "https://www.apple.com")!) { [weak self] data, response, error in
guard let s = self else {
return
}
let someValue = "A"
print(someValue, "-----", separator: "\n")
s.performFilteringTask(someValue: someValue, completionHandler: { someValue in
print(someValue, "-----", separator: "\n")
})
}
task.resume()
}
private func performFilteringTask(someValue aValue: String, completionHandler: (String -> Void)?) {
var someValue = ""
let op = NSBlockOperation(block: {
someValue = aValue + "+B"
print(someValue, "-----", separator: "\n")
})
op.completionBlock = {
dispatch_async(dispatch_get_main_queue()) { [weak self] in
guard let s = self else {
return
}
print(someValue, "-----", separator: "\n")
s.performSomethingSpecial(someValue: someValue, completionHandler: completionHandler)
}
}
operationQueue.addOperation(op)
}
private func performSomethingSpecial(someValue aValue: String, completionHandler: (String -> Void)?) {
var someValue = ""
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
someValue = aValue + "+C"
print(someValue, "-----", separator: "\n")
completionHandler?(someValue)
}
}
}