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/dailybuild 。 9 10lldb工具在SDK中的路径为`\ohos-sdk\[system]\native\llvm`,其中system可选windows/linux/darwin。 11 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.out。 77 78 2. 运行LLDB工具,并指定要调试的文件为a.out。 79 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.out。 227 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