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/darwin。 14 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.out。 76 2. 运行LLDB工具,并指定要调试的文件为a.out。 77 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.out。 208 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