DevEco Studio提供了丰富的调试能力,在NDK开发过程中可以利用这些能力检测并修复程序中的错误。调试能力包括:
- 使用真机进行调试:将应用/服务运行到真机设备上并进行调试,具体请参见[使用真机进行调试]
使用真机进行调试
DevEco Studio提供了丰富的HarmonyOS应用/服务调试能力,支持JS、ArkTS、C/C++单语言调试和ArkTS/JS+C/C++跨语言调试能力,并且支持三方库源码调试,帮助开发者更方便、高效的调试应用/服务。
HarmonyOS应用/服务调试支持使用真机设备、模拟器、预览器调试。接下来以使用真机设备为例进行说明,详细的调试流程如下图所示:
- [配置签名信息]:使用真机设备进行调试前需要对HAP[进行签名];使用模拟器和预览器调试无需签名。
- [设置调试代码类型]:调试类型默认为Detect Automatically 。
- [设置HAP安装方式]:选择先卸载应用/服务后再重新安装或覆盖安装。
- [启动调试]:启动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 ,点击+,填写remoteUrl 和localUrl。
- 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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿