鸿蒙(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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿

相关推荐
SuperHeroWu72 小时前
【HarmonyOS】鸿蒙应用接入微博分享
华为·harmonyos·鸿蒙·微博·微博分享·微博sdk集成·sdk集成
期待未来的男孩2 小时前
华为FusionCube 500-8.2.0SPC100 实施部署文档
华为
岳不谢4 小时前
VPN技术-VPN简介学习笔记
网络·笔记·学习·华为
zhangjr05754 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
Industio_触觉智能5 小时前
如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示
openharmony·selinux·开源鸿蒙·鸿蒙开发板·rk3566开发板
诗歌难吟46411 小时前
初识ArkUI
harmonyos
SameX11 小时前
HarmonyOS Next 设备安全特性深度剖析学习
harmonyos
郭梧悠12 小时前
HarmonyOS(57) UI性能优化
ui·性能优化·harmonyos
郝晨妤1 天前
鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
android·ios·华为od·华为·华为云·harmonyos·鸿蒙
Peace*1 天前
HarmonyOs鸿蒙开发实战(16)=>沉浸式效果第一种方案一窗口全屏布局方案
harmonyos·鸿蒙·鸿蒙系统