HarmonyOS Developer DevEco Studio使用指南-应用/服务调试

丶龙八夷
发布于 2023-4-4 11:49
浏览
0收藏

堆栈可视化调试

堆栈可视化功能可以在调试过程中,将函数之间的调用关系以直观的可视化结构图呈现出来,保留了历史调用关系,克服了跨设备跨语言堆栈列表不连续的弊端。堆栈可视化可使用不同颜色表示不同设备调试的模块,点击调用关系结构图中的函数节点能自动定位到代码中的函数处。使开发者溯源代码更加轻松快捷。

堆栈可视化按如下方式操作。

说明

该功能支持HarmonyOS API Version 4至7的工程,不支持C++工程。

  1. 在待调试的源代码中打上断点,并启动调试功能。
  2. 在代码的任意位置单击鼠标右键,在弹出窗口中单击Call Stack

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  1. 通过调试控制器对代码进行调试,在右侧Call Stack窗口可以查看函数调用关系。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

Call Stack窗口显示的函数调用关系:

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

Release应用堆栈解析

应用在Release后,经过代码混淆的堆栈信息无法定位到源码的具体文件和行位置,不易于快速解决问题。针对该场景,DevEco Studio提供了Release应用堆栈解析功能,利用Release应用堆栈中的bundle路径,通过映射规则转换为具体的源码路径,从而提升解决问题的效率。当前仅API Version 8~9支持。

Release应用堆栈解析功能操作方法如下:

  1. 单击菜单栏Code > Analyze Stack Trace。
  2. 在弹出的Analyze Stack Trace对话框中,粘贴Release应用的异常堆栈信息,单击OK

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

DevEco Studio将解析后的堆栈信息显示在底部的Stacktrace页签中,点击路径链接可快速定位到源码具体位置。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

C/C++时光调试

针对C/C++开发场景,DevEco Studio在提供基础调试能力的基础上,同时提供时光调试(历史执行模式)能力,帮助开发者更好地理解代码和更迅速定位问题。

时光调试(历史执行模式)是指在调试过程中可以回退到历史行和历史断点,查看相关变量信息。支持的调试操作为:

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

前提条件

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

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

操作步骤

  1. 设置断点,进入调试模式。
  2. 在Debug页签的调试控制按钮中,操作时光调试相关按钮。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

其中,操作按钮说明如下:


HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

跨语言调试

ArkTS/JS与C/C++工程跨语言调试

在C/C++工程中,采用ArkTS/JS与C/C++进行混合开发。一般使用ArkTS或JS进行界面的开发,使用C/C++来开发应用/服务的性能要求较高的部分功能、或Native平台迁移代码。针对这种场景,DevEco Studio提供了ArkTS/JS与C/C++语言的跨语言调试能力,能够在ArkTS或JS调用C/C++方法处,直接进入C/C++代码进行调试。

ArkTS/JS与C/C++跨语言调试功能,包括ArkTS/JS、C/C++断点的管理、调试信息的展示、单步调试等能力,方便开发者快速发现并解决跨语言调用相关代码的问题。

说明

ArkTS/JS与C/C++工程跨语言调试支持API Version 9。

ArkTS/JS与C/C++工程跨语言调试的操作方法如下:

  1. 将DevEco Studio与设备进行连接。如果使用真机设备,请先对应用/服务进行签名,具体请参考​​为应用/服务进行签名​​。
  2. 在菜单栏单击Run > Edit Configurations,选择OpenHarmony APP下的模块名(如entry),然后在右侧窗口中选择Debugger,将Debug type设置为“Dual(Js + Native)”或“Detect Automatically” 。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  1. 在ArkTS或JS代码调用C/C++方法代码行处设置断点。
  2. 单击


HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

按钮或使用快捷键Shift+F9,启动调试。

  1. 当调试到ArkTS或JS代码调用C/C++方法代码处进行中断。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  1. 使用Step Into进入到对应的C/C++方法的第一行代码处。然后便可以在C++代码中进行调试,包括:Step Over/Step Into/Step Out/Resume Program。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

JS和Java跨语言调试

应用场景概述

针对“JS FA调用Java PA”和“JS FA拉起Java FA”这两种场景,DevEco Studio提供了JS/Java跨语言的调试功能,开发者可以直接从JS代码Step Into进入到Java代码调试中。JS/Java跨语言调试功能包括JS和Java断点的管理、调试信息的展示、单步调试等能力,方便开发者快速发现并解决JS FA调用Java PA相关代码的问题。

JS FA调用Java PA场景

在HarmonyOS应用/服务开发中,通常会涉及到使用JS和Java语言同时开发的场景,一般使用JS来开发应用/服务的UI,使用Java开发应用/服务的逻辑,JS FA调用Java PA,具体请参考​​JS FA调用Java PA的机制介绍​​。

说明

暂不支持JS FA异步调用Java PA场景的跨语言调试。

在使用JS/Java跨语言调试设置断点时需注意,JS FA是调用者,Java PA是被调用者,需要在JS FA调用Java PA的代码行或者在Java PA相关接口处设置断点,然后单击Step Into才能在Java或JS实现处中断。

  • JS FA端提供了如下接口:

     ○  ​​FeatureAbility.callAbility(OBJECT)​​:调用PA能力。

     ○  ​​FeatureAbility.subscribeAbilityEvent(OBJECT, Function)​​​:订阅PA能力。如果JS FA调用了订阅接口,则在Java PA的​​sendRequest​​方法处设置断点,则可以从Java PA进入到JS FA中。

     ○  ​​FeatureAbility.unsubscribeAbilityEvent(OBJECT)​​:取消订阅PA能力。

  • Java PA端提供了如下接口:

     ○  ​​boolean IRemoteObject.onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option)​​​:Ability方式,与FA通过rpc方式通信,该接口主要用于跨设备调用,也支持​​跨设备分布式应用/服务调试​​。该方式的优点在于PA可以被不同的FA调用。

     ○  ​​boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option)​​:Internal Ability方式,集成在FA中,适用于与FA业务逻辑关联性强,响应时延要求高的服务。该方式仅支持本FA访问调用。

JS FA拉起Java FA场景

在分布式拉起场景中,允许JS FA拉起一个本地或远程的Java FA,在使用JS/Java跨语言调试设置断点时需注意,JS FA是拉起方,Java FA是被拉起方,需要在JS FA调用Java PA的代码行或者在Java PA相关接口处设置断点,才能正常进入Java断点。

  • JS FA端提供了如下接口:

     ○  ​​FeatureAbility.startAbility(OBJECT)​​:拉起一个远程或本地的FA,无回调结果。

     ○  ​​FeatureAbility.startAbilityForResult(OBJECT)​​:拉起一个本地的FA,并在回调中等待被拉起FA的结果返回。

操作步骤

JS/Java跨语言调试的操作方法如下:

  1. 在菜单栏单击Run > Edit Configurations,选择HarmonyOS APP下的模块名(如entry),然后在右侧窗口中选择“Debugger”。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  1. 检查和设置“Debug type”,请选择Dual(Js+Java)或者Detect Automatically选项。
  2. 在JS FA调用Java PA处或者在Java PA的相关代码处设置断点。
  3. 单击


HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

按钮或者快捷键Shift+F9,启动调试

  • 如果在JS FA调用Java PA代码行处设置断点:进入断点后,单击Step Into,快捷键为F7(macOS为F7),进入Java PA函数体,然后进行Java PA的调试。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  • 如果在Java PA相关代码行处设置断点:进入断点后,单击Resume Program,快捷键为F9(macOS为Option+Command+R),开始Java PA的调试。


Java和C/C++跨语言调试

在HarmonyOS应用/服务开发中,通常会涉及到使用C/C++和Java语言同时开发的场景,一般使用C/C++来开发应用/服务的性能要求较高的部分功能、或Native平台迁移代码,使用Java开发应用/服务的逻辑。针对这种场景,DevEco Studio提供了C/C++/Java跨语言的调试功能,包括C/C++和Java断点的管理、调试信息的展示、单步调试等能力,方便开发者快速发现并解决Java调用C/C++相关代码的问题。

说明

Java和C/C++跨语言调试,只能使用本地真机设备进行调试,不支持远程真机和远程模拟器进行调试。

Java和C/C++跨语言调试的操作方法如下:

  1. 在菜单栏单击Run > Edit Configurations,选择HarmonyOS APP下的模块名(如entry),然后在右侧窗口中选择“Debugger”。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  1. 检查和设置“Debug type”,请选择Dual(Java+Native)或者Detect Automatically选项。
  2. 在Java代码或C/C++代码处设置断点。
  3. 单击


HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

按钮或者快捷键Shift+F9,启动调试

说明

如果直接单击

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

按钮或者快捷键Shift+F9启动调试,可能应用/服务的启动速度较慢。建议先通过

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

启动应用/服务,再通过

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

去attach调试应用/服务。

  • 如果在Java代码行处设置断点:进入断点后,可以进行调试单步操作:Step Over/Step Into/Step Out/Resume Program。
  • 当代码运行到调用Native方法的代码行时,可以直接Step Into进入到对应的Native方法。

图1 在Java语言中调用C/C++方法处中断

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

图2 Step Into进入到对应的Native方法

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区

  • 如果在C/C++相关代码行处设置断点:进入断点后,可以进行调试单步操作:Step Over/Step Into/Step Out/Resume Program。

HarmonyOS Developer DevEco Studio使用指南-应用/服务调试-鸿蒙开发者社区



文章转载自:​​https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/java_c_debug-0000001195406459-V3​


分类
标签
已于2023-4-4 11:49:12修改
收藏
回复
举报
回复
    相关推荐