概述
LLDB(Low Level Debugger)是新一代高性能调试器。
当前HarmonyOS中的LLDB工具是在[llvm15.0.4]基础上适配演进出来的工具,是HUAWEI DevEco Studio工具中默认的调试器,支持调试C和C++应用。
工具获取
可通过HUAWEI DevEco Studio下载SDK获取LLDB调试工具。
以Windows平台为例,lldb.exe的存放路径为sdk[HarmonyOS版本]\base\native\llvm\bin。例如“sdk\HarmonyOS-NEXT-DP1\base\native\llvm\bin”。
lldb-server分为user用户工具和root用户工具。适用于user用户的lldb-server是带签名的工具。
路径 | 说明 |
---|---|
sdk[HarmonyOS版本]\openharmony\native\llvm\lib\clang\15.0.4\bin\aarch64-linux-ohos\lldb-server | 适用于root镜像aarch64-linux-ohos架构的lldb-server |
sdk[HarmonyOS版本]\openharmony\native\llvm\lib\clang\15.0.4\bin\arm-linux-ohos\lldb-server | 适用于root镜像arm-linux-ohos架构的lldb-server |
sdk[HarmonyOS版本]\openharmony\native\llvm\lib\clang\15.0.4\bin\arm-linux-ohos\lldb-server | 适用于root镜像x86_64-linux-ohos架构的lldb-server |
sdk[HarmonyOS版本]\hms\native\lldb\aarch64-linux-ohos\lldb-server | 适用于user镜像aarch64-linux-ohos架构的lldb-server |
sdk[HarmonyOS版本]\hms\native\lldb\arm-linux-ohos\lldb-server | 适用于user镜像aarch64-linux-ohos架构的lldb-server |
sdk[HarmonyOS版本]\hms\native\lldb\x86_64-linux-ohos\lldb-server | 适用于user镜像x86_64-linux-ohos架构的lldb-server |
功能列表
此处列举LLDB调试器支持的部分功能,更多命令参考:[LLDB工具使用指导]和[LLDB官网手册]。Windows、Linux x86_64和Mac平台的LLDB工具有些许差异,以实际应用为准。
- 记录日志
- 断点管理
- 观察点管理
- 表达式处理
- 查看变量
- 进程/线程管理
- 汇编处理
- 源码信息获取
- 信号处理
- 进程启动
- attach进程
应用场景
-
本地调试
-
Linux x86_64本地调试。
LLDB支持在Linux x86_64环境上调试C和C++应用。
-
Mac桌面本地调试。
LLDB支持在Mac桌面(包括Mac x86_64和M1系统)调试C和C++应用。
-
-
远程调试
-
基于HUAWEI DevEco Studio的远程调试。
LLDB支持基于HUAWEI DevEco Studio在Windows和Mac桌面连接HarmonyOS设备或模拟器远程调试Native C++应用,即使用HUAWEI DevEco Studio的Debug调试功能。
-
桌面连接HarmonyOS设备远程调试。
HarmonyOS设备为root镜像,SELinux关闭:LLDB支持在Windows、Mac桌面和Linux x86_64环境直连HarmonyOS设备远程调试C和C++应用以及可执行二进制。
HarmonyOS设备为root镜像,SELinux开启:LLDB支持在Windows、Mac桌面和Linux x86_64环境直连HarmonyOS设备远程调试C和C++应用以及可执行二进制,但是lldb-server和要调试的应用或可执行二进制只能放在/data/local/tmp/debugserver目录内。
HarmonyOS设备是user镜像,SELinux开启:LLDB支持在Windows、Mac桌面和Linux x86_64环境直连HarmonyOS设备远程调试基于HUAWEI DevEco Studio编译的带签名的debug版本的hap包,目前仅支持此类调试。
说明
root镜像:使用hdc shell id命令查询到“uid=0(root)”,或执行hdc shell进入交互命令环境,提示符为“#”。
user镜像:使用hdc shell id命令查询到“uid=2000(shell)”,或执行hdc shell进入交互命令环境,提示符为“$”。
SELinux开启模式:使用hdc shell getenforce命令查询到“Enforcing”。
SELinux关闭模式:使用hdc shell getenforce命令查询到“Permissive”。
-
使用指导-本地调试
说明
Linux x86_64或Mac本地调试步骤一致。
使用LLDB工具启动应用并进行调试
此处以在Linux x86_64环境调试一个使用clang编译器生成的带有调试信息的可执行文件a.out为例。
源文件:hello.cpp
#include <iostream>
using namespace std;
int main() {
cout << "hello world!" <<endl;
return 0;
}
编译:
<clang distribution>/bin/clang++ -g hello.cpp -o a.out
-
获取到与LLDB同一版本的clang编译器生成的带有调试信息的可执行文件a.out。
-
运行LLDB工具,并指定要调试的文件为a.out。
./lldb a.out
-
在代码中main函数处设置断点。
(lldb) b main
-
运行应用,使其停在断点处。
(lldb) run
-
继续运行应用。
(lldb) continue
-
列出所有断点。
(lldb) breakpoint list
-
显示当前帧的参数和局部变量。
(lldb) frame variable
-
按需执行调试命令进行后续调试操作。
-
退出调试。
(lldb) quit
使用LLDB工具调试已经启动的应用
此处以在Mac环境调试一个使用clang编译器生成的带有调试信息和用户输入的可执行文件a.out为例。
源文件:hello.cpp
#include <iostream>
using namespace std;
int main() {
int i = 0, j = 5, sum = 0;
cout << "Please input a number of type int”" <<endl;
cin >> i;
cout << i;
sum = i + j;
cout << sum <<endl;
return 0;
}
编译:
<clang distribution>/bin/clang++ -g hello.cpp -o a.out
-
在终端窗口1启动应用。(窗口会返回一条信息“Please input a number of type int”)
./a.out
-
在终端窗口2运行LLDB工具。
./lldb
-
attach应用。
(lldb) process attach --name a.out
-
在hello.cpp的第10行设置断点。
(lldb) breakpoint set --file hello.cpp --line 10
-
在终端窗口1,输入一个int类型的数。
88
-
在终端行窗口2继续运行应用,使应用停在断点处。
(lldb) continue
-
按需执行调试命令进行后续调试操作。
-
detach应用。
(lldb) detach
-
退出调试。
(lldb) quit
说明
步骤[attach应用]和[设置断点]可以调换顺序执行。
使用指导-远程调试
说明
- 基于HUAWEI DevEco Studio的远程调试参考[官方调试指导]
- 远程调试时需要lldb-server和lldb配合使用。注意根据设备镜像选择user或root版的lldb-server。
- Windows,Linux x86_64和Mac远程调试步骤一致。
Windows平台连接aarch64-linux-ohos架构root镜像SELinux关闭的Harmony设备进行远程调试
源文件:hello.cpp
#include <iostream>
using namespace std;
int main() {
cout << "hello world!" <<endl;
return 0;
}
编译:
<clang distribution>/bin/clang++ --target=aarch64-linux-ohos --sysroot=<sysroot distribution> -g hello.cpp -o a.out
- 打开命令行窗口1,将lldb-server和可执行文件a.out推送到设备。
hdc file send lldb-server /data/local/tmp
hdc file send a.out /data/local/tmp
hdc shell chmod 755 /data/local/tmp/lldb-server /data/local/tmp/a.out
-
运行lldb-server。(8080为有效且当前未被占用的端口号,用户可自定义)
hdc shell ./data/local/tmp/lldb-server p --server --listen "*:8080"
-
打开命令行窗口2,运行二进制文件lldb。
lldb
-
在LLDB命令行窗口进行远端选择与连接。
(lldb) platform select remote-ohos
(lldb) platform connect connect://localhost:8080
-
指定要调试的设备上的二进制文件a.out。
(lldb) target create /data/local/tmp/a.out
-
在代码中main函数处设置断点。
(lldb) b main
-
启动应用。
(lldb) run
-
查看当前目标进程的源码。
(lldb) source list
-
按需执行调试命令进行后续调试操作。
-
退出调试。
(lldb) quit
Windows平台连接aarch64-linux-ohos架构user镜像SELinux开启的HarmonyOS设备进行远程调试
说明
- 调试过程中需保持设备在非锁屏状态,锁屏不允许启动调试器调试。
- 基于HUAWEI DevEco Studio调试user镜像SELinux开启的HarmonyOS设备的hap包。
FAQ
- 当在lldb命令行窗口执行run返回信息为:“error:‘A’ packet returned an error: 8”或类似信息,则意味着不允许调试器启动用于调试的进程,一般都是因为没有权限导致的,请确认调试设备是否限制调试。
- 运行lldb-server,报错“Permission denied”。一般是lldb-server无可执行文件导致的,添加权限即可。
最后呢
很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点
如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。
针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。
- 《鸿蒙 (OpenHarmony)开发学习视频》
- 《鸿蒙生态应用开发V2.0白皮书》
- 《鸿蒙 (OpenHarmony)开发基础到实战手册》
- OpenHarmony北向、南向开发环境搭建
- 《鸿蒙开发基础》
- 《鸿蒙开发进阶》
- 《鸿蒙开发实战》
总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿