I have this bit of code:
class Talker:NSObject {
func describe<T: Showable, U:Showable>(stuffs: [Blob<T, U>]) {
let useless:Int = 71
print("useless = \(useless)")
for s in stuffs {
print("s = \(s)")
}
}
}
I have a breakpoint inside the for loop. I am trying to display the value of stuffs in lldb. I get this:
(lldb) po stuffs
error: <EXPR>:2:1: error: use of unresolved identifier 'stuffs'
stuffs
^~~~
(lldb) frame variable -L stuffs
0x00007fff5be1b9d8: ([Fork.Blob<T, Fork.Stem>]) stuffs = 1 value {
: [0] = <Unable to determine byte size.>
}
So I tried this:
(lldb) register read pc
rip = 0x000000010240209d Fork`Fork.Talker.describe <A, B where A: Fork.Showable, B: Fork.Showable> (Swift.Array<Fork.Blob<A, B>>) -> () + 1741 at Blossom.swift:89
(lldb) image lookup -va 0x000000010240209d
Address: Fork[0x000000010000709d] (Fork.__TEXT.__text + 25389)
Summary: Fork`Fork.Talker.describe <A, B where A: Fork.Showable, B: Fork.Showable> (Swift.Array<Fork.Blob<A, B>>) -> () + 1741 at Blossom.swift:89
Module: file = "/Users/abc/Library/Developer/Xcode/DerivedData/Fork-gdjlcshhkbqtnyajeeyaxbaeesyu/Build/Products/Debug-iphonesimulator/Fork.app/Fork", arch = "x86_64"
CompileUnit: id = {0x00000000}, file = "/Users/abc/Code/Fork/Fork/Blossom.swift", language = "swift"
Function: id = {0x300001272}, name = "@convention(method) (Fork.Talker) -> <T : Showable, U : Showable> (Swift.Array<Fork.Blob<T, U>>) -> ()", range = [0x00000001024019d0-0x0000000102402413)
FuncType: id = {0x300001272}, byte-size = 8, decl = Blossom.swift:85, compiler_type = "@convention(method) Fork.Talker -> <T : Showable, U : Showable> [Fork.Blob<T, U>] -> ()
"
Blocks: id = {0x300001272}, range = [0x1024019d0-0x102402413)
id = {0x3000012cd}, range = [0x1024019fc-0x102402413)
id = {0x3000012ed}, range = [0x102401b8d-0x1024023d4)
LineEntry: [0x000000010240209d-0x000000010240211c): /Users/abc/Code/Fork/Fork/Blossom.swift:89:19
Symbol: id = {0x0000022c}, range = [0x00000001024019d0-0x0000000102402420), name="Fork.Talker.describe <A, B where A: Fork.Showable, B: Fork.Showable> (Swift.Array<Fork.Blob<A, B>>) -> ()", mangled="_TFC4Fork6Talker8describeu0_RxS_8Showable_S1_rfGSaGVS_4Blobxq___T_"
Variable: id = {0x3000012fe}, name = "s", type = "Fork.Blob<T, U>", location = DW_OP_fbreg(-664), decl = Blossom.swift:88
Variable: id = {0x3000012de}, name = "useless", type = "Swift.Int", location = DW_OP_fbreg(-96), decl = Blossom.swift:86
Variable: id = {0x300001294}, name = "stuffs", type = "Swift.Array<Fork.Blob<T, U>>", location = DW_OP_fbreg(-80), decl = Blossom.swift:85
Variable: id = {0x3000012a3}, name = "self", type = "Fork.Talker", location = DW_OP_fbreg(-88), decl = Blossom.swift:85
Variable: id = {0x3000012b3}, name = "$swift.type.T", type = "Builtin.RawPointer", location = DW_OP_fbreg(-48), decl =
Variable: id = {0x3000012c0}, name = "$swift.type.U", type = "Builtin.RawPointer", location = DW_OP_fbreg(-56), decl =
(lldb) memory read -t "Swift.Array<Fork.Blob<T, U>>" -a $fp-80
error: unable to find any types that match the raw type 'Swift.Array<Fork.Blob<T, U>>' for full type 'Swift.Array<Fork.Blob<T, U>>'
How can I inform lldb of the full type?
To check my syntax, I see I can display the value of useless accurately.
(lldb) memory read -t "Swift.Int" -a $fp-96 (Int) 0x7fff5d801390 = 71
Note: I'm using Xcode 7.3.1 and Swift 2.2.
Jim Ingham was correct. This was just a bug from Xcode 7 and Swift 2.2.
Using Xcode 8.2 I can po stuffs now and see debug output.
(lldb) po stuffs
▿ 2 elements
▿ 0 : Blob<Blossom, Stem>
▿ thing : <Fork.Blossom: 0x600000058210>
▿ otherThings : Optional<Array<Stem>>
▿ some : 2 elements
▿ 0 : <Fork.Stem: 0x60800005a880>
▿ 1 : <Fork.Stem: 0x60800005a2e0>
▿ 1 : Blob<Blossom, Stem>
▿ thing : <Fork.Blossom: 0x600000058240>
▿ otherThings : Optional<Array<Stem>>
▿ some : 2 elements
▿ 0 : <Fork.Stem: 0x60800005a880>
▿ 1 : <Fork.Stem: 0x60800005a2e0>
You shouldn't have to tell lldb the type. OTOH, lldb has to be able to figure out what the fully resolved type of this argument is at runtime, and that can be tricky.
If this is Xcode 7 or Swift 2.x, you might try with Xcode 8/Swift 3.0. lldb got a fair bit better at this task with some help from the Swift 3.0 compiler. If it still doesn't work with Swift 3.0, please file a bug with http://bugreporter.apple.com.
User contributions licensed under CC BY-SA 3.0