现在我们可以导入模块
(lldb) expr @import UIKit
这个import
的含义是什么?导入模块时调试器会发生什么。
我们可以使用它来导入静态库中的一些私有头文件,以及如何?
答案 0 :(得分:6)
在调试器中运行@import <Framework>
几乎可以完成它在源代码中所做的工作,使类型和类型成为可能。实现lldb表达式解析器的编译器可用的方法签名。
它不会使框架中的代码可用,只是类型,并且它不适用于随机的标头集,仅适用于具有适当模块映射的clang模块。
如果要在调试器的表达式解析器中引入一些内部类型,可以使用表达式前缀设置target.expr-prefix
。
答案 1 :(得分:4)
下面的示例代码和命令说明了Jim的一些回答:
框架
此框架称为rusty_nails
。它在我的iOS应用内。
class Hello{
static func world() {
print("hello from a static method")
}
}
调试器命令
使用lldb连接到iOS应用。
(lldb) po Hello()
error: use of undeclared identifier 'Hello'
(lldb) exp import rusty_nails
error: unknown type name 'import'
(lldb) settings set target.language swift
(lldb) exp import rusty_nails
(lldb) po Hello()
<Hello: 0x60000001a630>
(lldb) po Hello.world()
hello from a static method
导入lldb的语法
(lldb) expr @import <stdbool.h> // C and Objective-C
(lldb) exp import UIKit // Swift