如何使用Swift在LLDB中打印等效的#line #file #function?

Tre*_*res 1 lldb swift

在源代码中,如果我这样做:

print("\(#file) \(#line) \(#function)")
Run Code Online (Sandbox Code Playgroud)

我得到如下输出:

MyFile.swift 31 doFoo()
Run Code Online (Sandbox Code Playgroud)

但是,从 LLDB 中的断点开始,如果我执行类似操作:

(lldb) po "\(#file) \(#function) \(#line)"
Run Code Online (Sandbox Code Playgroud)

我得到:

"<EXPR> $__lldb_expr(_:) 6"
Run Code Online (Sandbox Code Playgroud)

有没有办法从后者获得像前者那样的输出?我知道你可以这样做:

(lldb) frame info
frame #0: 0x0000000102d92c46 MyApp `closure #2 in Client.fetchCart($0=(error_instance = 0x0000600000810be0 -> 0x0000000108e88cc0 (void *)0x0000000108e88ce8: __SwiftNativeNSError)) at Client+Cart.swift:21:23
Run Code Online (Sandbox Code Playgroud)

......但输出非常混乱。有没有办法把它清理成文件、行和函数?

Swe*_*per 5

您可以设置用于显示帧信息的自定义格式。对于你想要的,你可以这样做:

settings set frame-format "${line.file.basename} ${line.number} ${function.name-without-args}\n"
Run Code Online (Sandbox Code Playgroud)

然后尝试frame info。你会得到类似的东西:

AppDelegate.swift 11 AppDelegate.application(_:didFinishLaunchingWithOptions:)
Run Code Online (Sandbox Code Playgroud)

您可以按照此答案使此设置永久化。