HarmonyOS开发里的知识:高性能调试工具-LLDB

654 篇文章 4 订阅
648 篇文章 6 订阅

概述

当前HarmonyOS中的LLDB工具是在llvm15.0.4llvm15.0.4lvm15.0.4基础上适配演进出来的工具,是HUAWEI DevEco Studio工具中默认的调试器,支持调试C和C++应用。

工具获取

可通过HUAWEI DevEco Studio下载SDK获取LLDB调试工具。

以Windows平台为例,lldb.exe的存放路径为SDK\[HarmonyOS版本]\base\native\llvm\bin。例如“sdk\HarmonyOS-NEXT-DB1\base\native\llvm\bin”。

lldb-server分为user用户工具和root用户工具。适用于user用户的lldb-server是带签名的工具。

表1 lldb-server工具目录

路径

说明

sdk\[HarmonyOS版本]\base\native\llvm\lib\clang\15.0.4\bin\aarch64-linux-ohos\lldb-server

适用于root镜像aarch64-linux-ohos架构的lldb-server

sdk\[HarmonyOS版本]\base\native\llvm\lib\clang\15.0.4\bin\arm-linux-ohos\lldb-server

适用于root镜像arm-linux-ohos架构的lldb-server

sdk\[HarmonyOS版本]\base\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设备是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
  1. 获取到与LLDB同一版本的clang编译器生成的带有调试信息的可执行文件a.out。
  2. 运行LLDB工具,并指定要调试的文件为a.out。
    ./lldb a.out
  3. 在代码中main函数处设置断点。
    (lldb) b main
  4. 运行应用,使其停在断点处。
    (lldb) run
  5. 继续运行应用。
    (lldb) continue
  6. 列出所有断点。
    (lldb) breakpoint list
  7. 显示当前帧的参数和局部变量。
    (lldb) frame variable
  8. 按需执行调试命令进行后续调试操作。
  9. 退出调试。
    (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. 在终端窗口1启动应用。(窗口会返回一条信息“Please input a number of type int”)
    ./a.out
  2. 在终端窗口2运行LLDB工具。
    ./lldb
  3. attach应用。
    (lldb) process attach --name a.out
  4. 在hello.cpp的第10行设置断点。
    (lldb) breakpoint set --file hello.cpp --line 10
  5. 在终端窗口1,输入一个int类型的数。
    88
  6. 在终端行窗口2继续运行应用,使应用停在断点处。
    (lldb) continue
  7. 按需执行调试命令进行后续调试操作。
  8. detach应用。
    (lldb) detach
  9. 退出调试。
    (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. 打开命令行窗口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
  2. 运行lldb-server。(8080为有效且当前未被占用的端口号,用户可自定义)
    hdc shell ./data/local/tmp/lldb-server p --server --listen "*:8080"
  3. 打开命令行窗口2,运行二进制文件lldb。
    lldb
  4. 在LLDB命令行窗口进行远端选择与连接。
    (lldb) platform select remote-ohos
    (lldb) platform connect connect://localhost:8080 
  5. 指定要调试的设备上的二进制文件a.out。
    (lldb) target create /data/local/tmp/a.out
  6. 在代码中main函数处设置断点。
    (lldb) b main
  7. 启动应用。
    (lldb) run
  8. 查看当前目标进程的源码。
    (lldb) source list
  9. 按需执行调试命令进行后续调试操作。
  10. 退出调试。
    (lldb) quit

Windows平台连接aarch64-linux-ohos架构user镜像SELinux开启的HarmonyOS设备进行远程调试

  • lldb-server需推送至指定的目录/data/local/tmp/debugserver。如:/data/local/tmp/debugserver/lldb-server或/data/local/tmp/debugserver/com.example.myapplication/lldb-server
  • lldb-server为适配user镜像的版本,在xx/aarch64-linux-ohos架构目录获取。
  • 此案例中的hap包为基于HUAWEI DevEco Studio创建的native C++默认工程编译的带debug信息的hap包。
  • 调试过程中需保持设备在非锁屏状态,锁屏不允许启动调试器调试。
  • 建议基于HUAWEI DevEco Studio调试user镜像SELinux开启的HarmonyOS设备的hap包。
  1. 打开命令行窗口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/com.example.myapplication
    hdc file send C:\Users\xxx\DevEcoStudioProjects\MyApplication\entry\build\default\outputs\default\entry-default-signed.hap data/local/tmp/com.example.myapplication
  2. hap包安装运行。
    hdc shell bm install -p data/local/tmp/com.example.myapplication
    hdc shell aa start -a EntryAbility -b com.example.myapplication -D
  3. 运行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:///com.example.myapplication/platform-1709869442631.sock --log-channels "lldb process:gdb-remote packets""
  4. 打开命令行窗口2,运行二进制文件lldb。
    lldb
  5. 在LLDB命令行窗口进行远端选择与连接。
    (lldb) platform select remote-ohos 
    (lldb) platform connect unix-abstract-connect://[7TD5T21610003493]/com.example.myapplication/platform-1709869442631.sock
  6. 添加目标可执行文件搜索路径。
    (lldb) settings append target.exec-search-paths "C:\Users\xxx\DevEcoStudioProjects\MyApplication \entry\build\default\intermediates\cmake\default\obj\arm64-v8a"
  7. 在代码中hap包源代码6行处设置断点。
    (lldb) breakpoint set --file "C:/Users/xxx/DevEcoStudioProjects/MyApplication/entry/src/main/cpp/napi_init.cpp" --line 6
  8. 指定要调试的设备上的hap包对应的应用pid。
    (lldb) attach <pid>
  9. 点击设备应用,使其继续响应,并停止在断点处。
  10. 继续调试。
    (lldb) continue
  11. 显示当前线程的栈帧回溯。
    (lldb) bt
  12. 按需执行调试命令进行后续调试操作。
  13. 退出调试。
    (lldb) quit

FAQ

  • 当在lldb命令行窗口执行run返回信息为:“error:'A' packet returned an error: 8”或类似信息,则意味着不允许调试器启动用于调试的进程,一般都是因为没有权限导致的,请确认调试设备是否限制调试。
  • 运行lldb-server,报错“Permission denied”。一般是lldb-server无可执行文件导致的,添加权限即可。


最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

点击领取→纯血版全套鸿蒙HarmonyOS学习资料(安全链接,放心点击

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

鸿蒙(HarmonyOS NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

HarmonyOS Next 最新全套视频教程

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

大厂面试必问面试题

鸿蒙南向开发技术

鸿蒙APP开发必备

鸿蒙生态应用开发白皮书V2.0PDF


请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

  • 35
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值