1# LLDB高性能调试器
2
3
4## 概述
5
6LLDB(Low Level Debugger)是新一代高性能调试器。详细说明参考[LLDB官方文档](https://lldb.llvm.org/)7
8当前OpenHarmony中的LLDB工具是在[llvm15.0.4](https://github.com/llvm/llvm-project/releases/tag/llvmorg-15.0.4)基础上适配演进出来的工具,是HUAWEI DevEco Studio工具中默认的调试器,支持调试C和C++应用。
9
10
11## 工具获取
12
13可通过OpenHarmony的SDK获取,lldb工具在SDK中的路径为\ohos-sdk\[system]\native\llvm,其中system可选windows/linux/darwin14
15以Windows平台为例,解压SDK后,lldb.exe的存放路径为\ohos-sdk\windows\native\llvm\bin。
16
17
18## 功能列表
19
20此处列举LLDB调试器支持的部分功能,更多功能与相关命令可见:[LLDB工具使用指导](https://gitee.com/openharmony/third_party_llvm-project/blob/master/lldb/README_zh.md)和[LLDB官网手册](https://lldb.llvm.org)21
22- 记录日志
23
24- 断点管理
25
26- 观察点管理
27
28- 表达式处理
29
30- 查看变量
31
32- 进程/线程管理
33
34- 汇编处理
35
36- 源码信息获取
37
38- 信号处理
39
40- 进程启动
41
42- attach进程
43
44
45## 应用场景
46
47- 本地调试
48  - Linux x86_64本地调试。
49
50     LLDB支持在Linux x86_64环境上调试C和C++应用。
51  - Mac桌面本地调试。
52
53     LLDB支持在Mac桌面(包括Mac x86_64和M1系统)调试C和C++应用。
54
55- 远程调试
56  - 基于HUAWEI DevEco Studio的远程调试。
57
58     LLDB支持基于HUAWEI DevEco Studio在Windows和Mac桌面连接OpenHarmony设备或模拟器远程调试Native C++应用,即使用HUAWEI DevEco Studio的Debug调试功能。
59  - 桌面连接OpenHarmony设备远程调试。
60
61     LLDB支持在Windows、Mac桌面和Linux x86_64环境直连OpenHarmony设备远程调试C和C++应用。
62
63
64## 使用指导-本地调试
65
66> **说明:**
67> Linux x86_64或Mac本地调试步骤一致。
68
69**使用步骤**
70
71- 使用LLDB工具启动应用并进行调试。
72
73  此处以在Linux x86_64环境调试一个使用clang编译器生成的带有调试信息的可执行文件a.out为例。
74
75  1. 获取到与LLDB同一版本的clang编译器生成的带有调试信息的可执行文件a.out76  2. 运行LLDB工具,并指定要调试的文件为a.out77
78      ```lldb
79      ./lldb a.out
80      ```
81  3. 在代码中main函数处设置断点。
82
83      ```lldb
84      (lldb) b main
85      ```
86  4. 运行应用,使其停在断点处。
87
88      ```lldb
89      (lldb) run
90      ```
91  5. 继续运行应用。
92
93      ```lldb
94      (lldb) continue
95      ```
96  6. 列出所有断点。
97
98      ```lldb
99      (lldb) breakpoint list
100      ```
101  7. 显示当前帧的参数和局部变量。
102
103      ```lldb
104      (lldb) frame variable
105      ```
106  8. 按需执行调试命令进行后续调试操作。
107  9. 退出调试。
108
109      ```lldb
110      (lldb) quit
111      ```
112
113- 使用LLDB工具调试已经启动的应用。
114
115  此处以在Mac环境调试一个使用clang编译器生成的带有调试信息和用户输入的可执行文件a.out为例。
116
117  1. 在命令行窗口1启动应用。(窗口会返回一条信息“Please input a number of type int”)
118
119      ```shell
120      ./a.out
121      ```
122  2. 在命令行窗口2运行LLDB工具。
123
124      ```shell
125      ./lldb
126      ```
127  3. attach应用。
128
129      ```lldb
130      (lldb) process attach --name a.out
131      ```
132  4. 在hello.cpp的第10行设置断点
133
134      ```lldb
135      (lldb) breakpoint set --file hello.cpp --line 10
136      ```
137  5. 在命令行窗口1,输入一个int类型的数。
138
139      ```shell
140      88
141      ```
142  6. 在命令行窗口2继续运行应用,使应用停在断点处。
143
144      ```lldb
145      (lldb) continue
146      ```
147  7. 按需执行调试命令进行后续调试操作。
148  8. detach应用。
149
150      ```lldb
151      (lldb) detach
152      ```
153  9. 退出调试。
154
155      ```lldb
156      (lldb) quit
157      ```
158
159  > **说明:**
160  > 步骤3和4可以调换顺序执行。
161
162
163## 使用指导-远程调试
164
165> **说明:**
166> - 远程调试时需要lldb-server和lldb配合使用。
167>
168> - Windows,Linux x86_64和Mac远程调试步骤一致。
169
170**使用步骤**
171
172此处以在Windows平台连接arm架构OpenHarmony设备(如:RK3568开发板)进行远程调试为例。
173
174> **说明:**
175> 其中/data/local/tmp为设备上指定的目录。
176>
177> 8080为监听端口,可自定义。
178>
179> 请确保设备上的lldb-server和a.out有可执行权限。
180
1811. 打开命令行窗口1,将lldb-server和可执行文件a.out推送到设备。(a.out是使用clang编译器编译hello.cpp生成的。)
182
183   ```shell
184   hdc file send lldb-server /data/local/tmp
185   hdc file send a.out /data/local/tmp
186   ```
187
1882. 运行lldb-server。
189
190   ```shell
191   hdc shell ./data/local/tmp/lldb-server p --server --listen "*:8080"
192   ```
193
1943. 打开命令行窗口2,运行二进制文件lldb。
195
196   ```shell
197   ./lldb
198   ```
199
2004. 在LLDB命令行窗口进行远端选择与连接。
201
202   ```lldb
203   (lldb) platform select remote-ohos
204   (lldb) platform connect connect://localhost:8080
205   ```
206
2075. 指定要调试的设备上的二进制文件a.out208
209   ```lldb
210   (lldb) target create /data/local/tmp/a.out
211   ```
212
2136. 在代码中main函数处设置断点。
214
215   ```lldb
216   (lldb) b main
217   ```
218
2197. 启动应用。
220
221   ```lldb
222   (lldb) run
223   ```
224
2258. 查看当前目标进程的源码。
226
227   ```lldb
228   (lldb) source list
229   ```
230
2319. 按需执行调试命令进行后续调试操作。
232
23310. 退出调试。
234
235   ```lldb
236   (lldb) quit
237   ```
238