在lldb中调试时导入头文件

Import header file when debug in lldb

现在我们可以导入模块

(lldb) expr @import UIKit

这个import是什么意思?当我们导入模块时调试器会发生什么。

我们可以用它在静态库中导入一些私有头文件吗?如何?

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

它不会使框架中的代码可用,只有类型可用,并且它不适用于一组随机 headers,仅适用于具有适当模块映射的 clang 模块。

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

下面的示例代码和命令说明了 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

帮助 LLDB(当项目有 Swift、Obj-C 和 C 时)

(lldb) po bool $foo = true; 
error: <EXPR>:3:5: error: consecutive statements on a line must be separated by ';'

(lldb) settings set target.language objc
(lldb) expr @import <stdbool.h> 
(lldb) po bool $foo = true; 
(lldb) po $foo
true