HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:使用真机进行调试

目录

调试流程

配置签名信息

调试设置

设置调试代码类型

设置HAP包安装方式

设置多HAP包安装

启动调试

断点管理


调试流程

DevEco Studio提供了丰富的OpenHarmony应用/服务调试能力,帮助开发者更方便、高效的调试应用/服务。

OpenHarmony应用/服务调试支持使用真机设备调试。使用真机设备进行调试前,需要对HAP进行签名后进行调试。详细的调试流程如下图所示:

配置签名信息

应用/服务在真机设备上运行,需要提前为应用/服务进行签名,DevEco Studio为开发者提供了自动化签名方案,可以一键完成应用/服务签名。请注意,自动化签名功能仅用于应用/服务调试阶段使用,不可用于发布上架应用市场。具体操作如下:

单击File > Project Structure > Project > Signing Configs界面勾选“Automatically generate signature”,等待自动签名完成即可,单击“OK”。如下图所示:

说明

如果您的应用/服务使用了“system_basic”和“system_core”权限,请参考修改应用权限等级
修改签名模板。您使用到的应用权限,可以在自动化签名完成后,单击Show Restricted Permissions进行查看。

调试设置

设置调试代码类型

OpenHarmony支持eTS、JS和C/C++代码调试,默认情况下调试器支持的调试类型为Js Only,支持调试eTS和JS代码。如果需要调试C/C++代码,请将调试器的调试类型选择Native Only。

修改调试类型的方法如下。

点击Run > Edit Configurations > Debugger,在OpenHarmony App中,选择相应模块,设置Debug type即可。

设置HAP包安装方式

在调试阶段,HAP包在设备上的安装方式有2种,可以根据实际需要进行设置。

  • 安装方式一:先卸载应用/服务后,再重新安装,该方式会清除设备上的所有应用/服务缓存数据(默认安装方式)。
  • 安装方式二:采用覆盖安装方式,不卸载应用/服务,该方式会保留应用/服务的缓存数据。

设置方法如下:

单击Run > Edit Configurations,设置指定模块的HAP包安装方式,勾选 Keep Application Data,则表示采用覆盖安装方式,保留应用/服务缓存数据。

设置多HAP包安装

如果工程中同时存在多个模块,且您的应用/服务存在跨模块间的调用时,在调试阶段需要同时安装多个模块的HAP包到设备中。此时,需要在任意模块的设置项中勾选Deploy Multi Hap Packages,启动调试时,DevEco Studio会将所有的模块都安装到设备上。

设置方法如下:

单击Run > Edit Configurations,在OpenHarmony App下,建议在entry模块下,勾选Deploy Multi Hap Packages

在启动调试时,请选择勾选了Deploy Multi Hap Packages的模块(如上图中的entry),然后再启动调试。

启动调试

  1. 在工具栏中,选择调试的设备,并单击Debug 

    Attach Debugger to Process

    启动调试。

    说明

    Debug和Attach Debugger的区别在于,Attach Debugger to Process可以先运行应用/服务,然后再启动调试,或者直接启动设备上已安装的应用/服务进行调试;而Debug是直接运行应用/服务后立即启动调试。

  2. 如果需要设置断点调试,则需要选定要设置断点的有效代码行,在行号(比如:5行)的区域后,单击鼠标左键设置断点(如图示的红点)。

    设置断点后,调试能够在正确的断点处中断,并高亮显示该行。

  3. 启动调试后,开发者可以通过调试器进行代码调试。调试器的功能说明如下表所示:
    表1 调试器按钮

    按钮

    名称

    快捷键

    功能

    Resume Program

    F9(macOS为Option+Command+R

    当程序执行到断点时停止执行,单击此按钮程序继续执行。

    Step Over

    F8(macOS为F8

    在单步调试时,直接前进到下一行(如果在函数中存在子函数时,不会进入子函数内单步执行,而是将整个子函数当作一步执行)。

    Step Into

    F7(macOS为F7

    在单步调试时,遇到子函数后,进入子函数并继续单步执行。

    Step Out

    Shift+F8(macOS为Shift+F8

    在单步调试执行到子函数内时,单击Step Out会执行完子函数剩余部分,并跳出返回到上一层函数。

    Stop

    Ctrl+F2(macOS为Command+F2

    停止调试任务。

    Run To Cursor

    Alt+F9(macOS为Option+F9

    断点执行到鼠标停留处。

断点管理

在设置的程序断点红点处,单击鼠标右键,然后单击More或按快捷键Ctrl+Shift+F8(macOS为Shift+Command+F8),可以管理断点。

表2 不同代码类型的断点管理功能

代码类型

断点管理

JS(JavaScript)、eTS

  • 普通行断点
  • Exception(异常)断点

C/C++

  • 普通行断点
  • Exception(异常)断点
  • Symbolic(符号)断点