往期鸿蒙全套实战文章必看:(文中附带全栈鸿蒙学习资料)
- 鸿蒙开辟核心知识点,看这篇文章就够了
- 最新版!鸿蒙HarmonyOS Next应用开辟实战学习路线
- 鸿蒙HarmonyOS NEXT开辟技能最全学习路线指南
- 鸿蒙应用开辟实战项目,看这一篇文章就够了(部分项目附源码)
概述
LLDB(Low Level Debugger)是新一代高性能调试器。
当前HarmonyOS中的LLDB工具是在llvm15.0.4底子上适配演收支来的工具,是HUAWEI DevEco Studio工具中默认的调试器,支持调试C和C++应用。
工具获取
可通过HUAWEI DevEco Studio下载SDK获取LLDB调试工具。
以Windows平台为例,lldb.exe的存放路径为sdk\[HarmonyOS版本]\openharmony\native\llvm\bin。比方“sdk\HarmonyOS-NEXT-DP1\openharmony\native\llvm\bin”。
表1 lldb-server工具目次 路径
说明
sdk\[HarmonyOS版本]\hms\native\lldb\aarch64-linux-ohos\lldb-server
实用于aarch64-linux-ohos架构的lldb-server
sdk\[HarmonyOS版本]\hms\native\lldb\arm-linux-ohos\lldb-server
实用于arm-linux-ohos架构的lldb-server
sdk\[HarmonyOS版本]\hms\native\lldb\x86_64-linux-ohos\lldb-server
实用于x86_64-linux-ohos架构的lldb-server
功能列表
此处列举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。
- 在代码中main函数处设置断点。
- 运行应用,使其停在断点处。
- 继续运行应用。
- 列出全部断点。
- 表现当前帧的参数和局部变量。
- 按需实行调试命令进行后续调试利用。
- 退出调试。
使用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”)
- 在终端窗口2运行LLDB工具。
- attach应用。
- (lldb) process attach --name a.out
复制代码 - 在hello.cpp的第10行设置断点。
- (lldb) breakpoint set --file hello.cpp --line 10
复制代码 - 在终端窗口1,输入一个int范例的数。
- 在终端行窗口2继续运行应用,使应用停在断点处。
- 按需实行调试命令进行后续调试利用。
- detach应用。
- 退出调试。
说明
步骤attach应用和设置断点可以调换次序实行。
使用引导-远程调试
说明
- 基于HUAWEI DevEco Studio的远程调试
- 远程调试时必要lldb-server和lldb配合使用。
- Windows,Linux x86_64和Mac远程调试步骤一致。
远程调试aarch64-linux-ohos架构root镜像
说明
为了方便调试建议调试时关闭SELinux。
源文件: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,关闭SELinux。
- 在命令行窗口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) platform select remote-ohos
- (lldb) platform connect connect://localhost:8080
复制代码 - 指定要调试的设备上的二进制文件a.out。
- (lldb) target create /data/local/tmp/a.out
复制代码 - 在代码中main函数处设置断点。
- 启动应用。
- 查看当前目标进程的源码。
- 按需实行调试命令进行后续调试利用。
- 退出调试。
远程调试aarch64-linux-ohos架构user镜像
说明
- user镜像SELinux默认开启,无法关闭。
- 建议基于HUAWEI DevEco Studio调试user镜像SELinux开启的HarmonyOS设备的hap包。
- lldb-server需推送至指定的目次/data/local/tmp/debugserver。如:/data/local/tmp/debugserver/lldb-server或/data/local/tmp/debugserver/com.example.myapplication/lldb-server。
- lldb-server在aarch64-linux-ohos架构目次获取。
- 此案例中的hap包为基于HUAWEI DevEco Studio创建的native C++默认工程编译的带debug信息的hap包。
- 调试过程中需保持设备在非锁屏状态,锁屏不允许启动调试器调试。
- 打开命令行窗口1,将lldb-server和hap包推送到设备。
- hdc shell mkdir data/local/tmp/debugserver/com.example.myapplication
- hdc file send lldb-server data/local/tmp/debugserver/com.example.myapplication
- hdc shell chmod 755 data/local/tmp/debugserver/com.example.myapplication/lldb-server
- hdc shell mkdir data/local/tmp/d333e74fe3ab488aad622a7055fbf396
- hdc file send C:\Users\xxx\DevEcoStudioProjects\MyApplication\entry\build\default\outputs\default\entry-default-signed.hap data/local/tmp/d333e74fe3ab488aad622a7055fbf396
复制代码 - hap包安装运行,关闭appfreeze。
- hdc shell bm install -p data/local/tmp/d333e74fe3ab488aad622a7055fbf396
- hdc shell aa start -a EntryAbility -b com.example.myapplication
- hdc shell aa attach -b com.example.myapplication
复制代码 - 运行lldb-server。
- hdc shell aa process -a EntryAbility -b com.example.myapplication -D "/data/local/tmp/debugserver/com.example.myapplication/lldb-server platform --listen unix-abstract:///lldb-server/platform.sock"
复制代码 - 打开命令行窗口2,运行二进制文件lldb。
- 在LLDB命令行窗口进行远端选择与毗连。
- (lldb) platform select remote-ohos
- (lldb) platform connect unix-abstract-connect:///lldb-server/platform.sock
复制代码 - 添加目标可实行文件搜索路径。
- (lldb) settings append target.exec-search-paths "C:\Users\xxx\DevEcoStudioProjects\MyApplication \entry\build\default\intermediates\cmake\default\obj\arm64-v8a"
复制代码 - 在源代码第6行处设置断点。
- (lldb) breakpoint set --file "C:/Users/xxx/DevEcoStudioProjects/MyApplication/entry/src/main/cpp/napi_init.cpp" --line 6
复制代码 - 指定要调试的设备上的hap包对应的应用pid。
- 点击设备应用,使其继续响应,并停止在断点处。
- 继续调试。
- 表现当火线程的堆栈回溯。
- 按需实行调试命令进行后续调试利用。
- 退出调试。
FAQ
- 当在lldb命令行窗口实行run返复书息为:“error:'A' packet returned an error: 8”或类似信息,则意味着不允许调试器启动用于调试的进程,一般都是因为没有权限导致的,请确认调试设备是否限制调试。
- 运行lldb-server,报错“Permission denied”。一般是lldb-server无可实行文件导致的,添加权限即可。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |