在lldb中调试时可以导入一些头文件吗?

时间:2016-06-12 03:43:52

标签: xcode lldb

现在我们可以导入模块

(lldb) expr @import UIKit

这个import的含义是什么?导入模块时调试器会发生什么。

我们可以使用它来导入静态库中的一些私有头文件,以及如何?

2 个答案:

答案 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