鸿蒙(API 12 Beta2版)NDK开发【通过DevEco Studio调试】调试和性能分析

devtools/2025/1/15 22:06:40/

DevEco Studio提供了丰富的调试能力,在NDK开发过程中可以利用这些能力检测并修复程序中的错误。调试能力包括:

  • 使用真机进行调试:将应用/服务运行到真机设备上并进行调试,具体请参见[使用真机进行调试]

使用真机进行调试

DevEco Studio提供了丰富的HarmonyOS应用/服务调试能力,支持JS、ArkTS、C/C++单语言调试和ArkTS/JS+C/C++跨语言调试能力,并且支持三方库源码调试,帮助开发者更方便、高效的调试应用/服务。

HarmonyOS应用/服务调试支持使用真机设备、模拟器、预览器调试。接下来以使用真机设备为例进行说明,详细的调试流程如下图所示:

1

  1. [配置签名信息]:使用真机设备进行调试前需要对HAP[进行签名];使用模拟器和预览器调试无需签名。
  2. [设置调试代码类型]:调试类型默认为Detect Automatically
  3. [设置HAP安装方式]:选择先卸载应用/服务后再重新安装或覆盖安装。
  4. [启动调试]:启动debug调试或attach调试

使用预览器调试的特别说明

使用真机或模拟器进行调试时,修改后的代码需要经过较长时间的编译和安装过程,才能刷新至调试环境。使用预览器进行调试,可快速地修改代码和运行应用,在DevEco Studio中直接查看修改后的界面显示效果。

开发者可以使用预览器运行调试Ability生命周期代码和界面代码,预览器调试支持基础Debug能力,包括断点、调试执行、变量查看等。

预览器调试使用约束:

  • 一个工程内不支持启动多个预览调试任务。

  • 一个Previewer只能支持普通预览或预览调试模式,不可同时支持两种模式。

  • 使用预览器进行调试不支持以下场景:

    • 不支持Attach。
    • 不支持跨Ability调试
    • 不支持C++调试
    • 不支持极速预览。
    • 不支持Hot Reload。

    调试过程中,如果本地编译设备so文件的源码路径和当前配置的C++源码路径不一致,可以分为以下两种场景处理:

    • 建立文件间映射关系:参考[三方源码调试],当Step Into进入汇编代码后,会弹出源码关联的提示,请点击“Select file”,选择本地对应C++源码进行关联。

三方源码调试

三方共享包分为静态共享包HAR和动态共享包HSP,两种共享包的源码调试方式有所区别,具体请查看以下指导。

HAR源码调试

HAR包的引用存在两个模式,对应的源码调试也有差异:

说明

  • attach调试时需要注意被调试应用的HAR包引用方式,需要保证本地工程引用HAR方式与被attach调试应用引用方式保持一致。
  • CPP调试需要保证so文件附带调试信息,请参考[build-profile.json5文件]添加strip字段并设置为false。
  • 引用方式1:引用本地工程的其他module。

    "dependencies": {  "library": "file:../library",}
    

    源码调试:关联本地模块源码进行调试,此时在对应module源码上进行调试

  • 引用方式2:引用本地HAR包或引用ohpm仓中的HAR包。

    "dependencies": {  "package": "file:./package.har",}
    

    源码调试

    • 如果HAR包在本地无对应源码,此时应用构建打包时引用的源码来源是oh_modules目录下的源码,只能针对oh_modules下源码进行调试

    • 如果HAR包在本地有对应源码,调试时可关联本地源码以实现对源码的调试

      • 关联本地源码方式一:

        如果工程依赖了远程仓库的HAR包,本地也有相应的源代码,可以通过修改前缀配置进行attach调试

        如下图所示,工程依赖了远程HAR包(也可以是本地的HAR包)。

        0

        此时可以在Run/Debug Configurations中通过如下配置来进行attach调试

        点击Run > Edit Configurations > Debugger,点击+,填写remoteUrllocalUrl

        • remoteUrl:应用程序加载HAR包的前缀路径。
        • localUrl:本地生成sourceMap中HAR的前缀路径。

        1

        remoteUrl和localUrl的获取方式如下:

        由于本地HAR工程不会产生sourceMap,所以需要一个入口。通常是新建一个工程,将HAR的源代码作为本地模块进行依赖。

        2

        然后build工程生成新的sourceMap。

        启动attach调试,在debug窗口获取程序加载时的前缀,该前缀即为remoteUrl

        3
        打开build后生成的sourceMap文件,找到本地源码的key值前缀,该前缀即为localUrl

        4

        配置完成后,再进行attach调试,此时便可在源码中断点命中及打断点。

        5

      • 关联本地源码方式二:

        • ets源码关联使用方法:当Step Into进入oh_modules中的ets代码后,会弹出源码关联的提示时,请点击“Choose Sources”,选择本地对应ets源码进行关联。

          6

        • C++源码关联使用方法:当Step Into进入汇编代码后,会弹出源码关联的提示,请点击“Select file”,选择本地对应C++源码进行关联。

          7

HSP源码调试

如果要调试HSP源码,需要将源码置于本地工程模块下,以[引用本地工程的module方式]进行调试

8

  • 建议路径间映射关系:选择Run > Edit Configurations,选择模块后,切换到Debugger页签,选择Native类型,在LLDB Startup Commands页签中,新增“settings set target.source-map “/buildbot/path” “/my/path””命令建立映射关系,其中参数一为编译环境中的源码路径,参数二为本地源码路径。

9

  • C/C++反向调试:在调试过程中可以回退到历史行和历史断点,查看相关变量信息,具体请参见[C/C++反向调试]。

C/C++反向调试

针对C/C++开发场景,DevEco Studio在提供基础调试能力的基础上,同时提供反向调试能力,帮助开发者更好地理解代码和更迅速定位问题。

反向调试是指在调试过程中可以回退到历史行和历史断点,查看历史调试信息,包括线程、堆栈和变量信息。支持的调试操作为:

  • 进入/退出反向调试模式
  • 反向Step Over回退到历史行
  • 反向Resume执行到历史断点
  • 在程序执行历史的记录点上查看全局、静态、局部变量值

前提条件

File > Settings > Build,Execution,Deployment > Debugger > C++ Debugger设置界面,勾选Enable time travel debug开启C++反向调试开关。

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿


http://www.ppmy.cn/devtools/90532.html

相关文章

富格林:正确方式阻挠交易欺诈

富格林认为,随着市场经济的不断发展,黄金行情也日益复杂,投资者在进行交易时需要掌握一些可信操作技巧,以便阻挠交易欺诈制定合理的交易策略。事实上,当我们积累到一定的可信操作技巧过后,阻挠交易欺诈就是…

《剑来》语句摘录(十二)

◆ 第二百零三章 休要略过不提 >> 怨怼与仇恨是快刀斩乱麻,一往无前。金铁相错,激起的火星,就是大丈夫的恩怨分明。无非敢作敢当。 愧疚和遗憾却是一把钝刀,刀刃上边的缺口,皆是曾经犯过的错误。关门磨刀即是后悔…

sql注入复现(1-14关)

目录 第一关(字符型注入) 第二关(数字型注入) 第三关(闭合方式不同) 第四关(用双引号闭合) 第五关(不会数据回显) 第六关(闭合方式不同双引…

Deequ教程来监控Spark/Hive离线数仓的数据质量实用教程

第一部分:Deequ简介与环境搭建 1. Deequ是什么? Deequ是AWS开源的一款基于Apache Spark的库,用于定义和验证数据质量规则。它通过声明式API允许用户定义一系列数据质量检查,并自动执行这些检查来评估数据集的质量,特…

LLM之提示词工程

1.提示与提示工程 提示工程作为一门新兴的学科,专注于开发和优化提示技术,旨在提升语言模型(LMs)在各种应用与研究主题中的效能。掌握提示工程技能对于深入理解大型语言模型(LLMs)的潜力与局限至关重要。 研究人员借助提示工程,致力于增强LLM在广泛且复杂的任务(如问答…

js:两种将dom转为图片img的方式

js:两种将dom转为图片img的方式 一、使用 HTML2Canvas 库二、使用 Canvas 手动绘制 需求常出现场景: 生成截图导出图片可视化 一、使用 HTML2Canvas 库 html2canvas 是一个非常流行的 JavaScript 库,可以将 DOM 元素渲染为 Canvas&#xff0c…

01 计算机系统基础-2

操作系统 进程管理 进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。基于死锁产生机制及解决方案&#…

python爬虫初识

一、什么互联网 互联网(Internet)是全球范围内最大的计算机网络,它将数以百万计的私人、公共、学术、商业和政府网络通过一系列标准通信协议(如TCP/IP)连接起来形成的一个庞大的国际网络。 互联网的起源可以追溯到196…