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