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

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

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

使用真机进行调试

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

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

  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包)。

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

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

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

        remoteUrl和localUrl的获取方式如下:

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

        然后build工程生成新的sourceMap。

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

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

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

      • 关联本地源码方式二:

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

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

HSP源码调试

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

  • 建议路径间映射关系:选择Run > Edit Configurations,选择模块后,切换到Debugger页签,选择Native类型,在LLDB Startup Commands页签中,新增"settings set target.source-map "/buildbot/path" "/my/path""命令建立映射关系,其中参数一为编译环境中的源码路径,参数二为本地源码路径。
  • 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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿

相关推荐
小华同学ai4 小时前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
Damon小智5 小时前
HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别
华为·harmonyos
爱笑的眼睛111 天前
uniapp 极速上手鸿蒙开发
华为·uni-app·harmonyos
K.P1 天前
鸿蒙元服务从0到上架【第三篇】(第二招有捷径)
华为·harmonyos·鸿蒙系统
K.P1 天前
鸿蒙元服务从0到上架【第二篇】
华为·harmonyos·鸿蒙系统
敲代码的小强1 天前
Flutter项目兼容鸿蒙Next系统
flutter·华为·harmonyos
程序猿会指北1 天前
纯血鸿蒙APP实战开发——Text实现部分文本高亮和超链接样式
移动开发·harmonyos·arkts·openharmony·arkui·组件化·鸿蒙开发
鸿蒙自习室1 天前
鸿蒙开发——关系型数据库的基本使用与跨设备同步
前端·数据库·华为·harmonyos·鸿蒙
SoraLuna2 天前
「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
开发语言·macos·ui·华为·harmonyos
资讯分享周2 天前
鸿蒙风起,未来已来——云学堂鸿蒙应用认证开营啦!
华为·harmonyos