鸿蒙(API 12 Beta2版)NDK开发【LLDB高性能调试器】调试和性能分析

概述

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
  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设备进行远程调试

说明

  • 调试过程中需保持设备在非锁屏状态,锁屏不允许启动调试器调试。
  • 基于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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿

相关推荐
威哥爱编程22 分钟前
在HarmonyOS NEXT 开发中,如何指定一个号码,拉起系统拨号页面
华为·harmonyos·arkts
The 旺32 分钟前
《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》
华为·harmonyos
嘿嘿-g3 小时前
华为IP(3)
网络·华为
~央千澈~4 小时前
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
鸿蒙开发
鸿蒙布道师4 小时前
鸿蒙NEXT开发随机工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
塞尔维亚大汉5 小时前
OpenHarmony之分布式软总线json.payload.c(三)
分布式·嵌入式·harmonyos
别说我什么都不会5 小时前
OpenHarmony解读之设备认证:sts协议-客户端接收end响应
物联网·嵌入式·harmonyos
No Silver Bullet7 小时前
HarmonyOS NEXT开发进阶(十四):HarmonyOS应用开发者基础认证试题集汇总及答案解析
华为·harmonyos
卓应16 小时前
2025年华为H31-831题库
网络·华为