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

Kar*_*arl 4 xcode lldb

现在我们可以导入模块了

(lldb) expr @import UIKit
Run Code Online (Sandbox Code Playgroud)

这是什么意思import?导入模块时调试器会发生什么.

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

Jim*_*ham 6

@import <Framework>在调试器中运行几乎完成了它在源代码中的工作,使得类型和方法签名可用于实现lldb表达式解析器的编译器.

它不会使框架中的代码可用,只是类型,并且它不适用于随机的标头集,仅适用于具有适当模块映射的clang模块.

如果要在调试器的表达式解析器中引入一些内部类型,可以使用表达式前缀设置target.expr-prefix.


rus*_*net 6

下面的示例代码和命令说明了Jim的一些答案:

构架

该框架称为rusty_nails。它在我的iOS应用程序内。

class Hello{
    static func world() {
        print("hello from a static method")
    }
}
Run Code Online (Sandbox Code Playgroud)

调试器命令

使用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
Run Code Online (Sandbox Code Playgroud)

导入lldb的语法

(lldb) expr @import <stdbool.h>  // C and Objective-C
(lldb) exp import UIKit          // Swift
Run Code Online (Sandbox Code Playgroud)