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

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

跨设备分布式应用/服务调试

DevEco Studio支持一个工程(单模块或多模块)连接多个设备,在设备之间能彼此通信的条件下(如分布式流转场景),支持对跨设备、跨模块、跨进程的HarmonyOS应用/服务进行调试。分布式应用/服务调试支持Java应用/服务调用Java应用/服务、JS应用/服务调用Java应用/服务,以及使用​​HarmonyOS IDL​​实现的跨设备场景,开发者在如下表中的方法处设置断点,当中断到该断点处,执行Step Into即可进入到被调用方法的实现处。

发起调用端(设备A)

实现调用端(设备B)

Java FA/PA:startAbility(Intent intent)

Java FA/PA:onStart(Intent intent)

Java FA/PA:connectAbility(Intent intent,IAbilityConnection conn)

Java PA:onConnect(Intent intent)

JS FA:FeatureAbility.startAbility(OBJECT)

Java PA/FA:onStart(Intent intent)

Java:IRemoteObject.sendRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option)

Java:IRemoteObject.onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option)

Java:HarmonyOS IDL方法调用处

Java:HarmonyOS IDL方法实现处

分布式应用/服务调试流程

下面以一个设备A(FA)调用设备B(PA)的分布式调用场景来介绍分布式应用/服务调试流程,如下图所示:

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

  1. 开发者启动分布式调试任务。
  2. IDE调试器会分别在设备A和设备B上安装应用/服务,并启动调试。
  3. 开发者在设备A(FA)调用设备B(PA)的调用处设置断点,IDE调试器在该断点处中断。
  4. 执行Step Into操作,则会在设备B(PA)被调用的方法实现处中断。
  5. 开发者对设备B(PA)进行调试。
  6. 如果在设备B(PA)被调用的方法实现处执行Step Out,则退出设备B(PA)的调试,并在设备A调用处中断。
  7. 开发者停止调试任务。
  8. IDE调试器停止设备A和设备B的应用/服务运行,调试结束。

前提条件

调测的多个设备成功组网,包括连接到同一个WLAN网络和登录同一个华为帐号。

操作步骤

  1. 在涉及跨设备调用的代码行设置断点。
  2. 选择跨设备调试配置(Super App)选项,单击


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

按钮启动调试。

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

  1. 在弹出的设备选择窗口,指定调试设备对应的模块名称。

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

  1. 启动调试后,DevEco Studio将按照勾选的多个设备,分别启动多个调试会话窗口,命名为:“Super App-模块名”,如Super App-entry。

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

  1. 在代码执行到断点处(跨设备调用的代码处)中断,单击Step Into,快捷键为F7(macOS为F7),则会自动跳转到被调用代码接口方法处。

例如,以上图中的调试界面为例,在Phone中调用TV的音乐播放能力,单击Step Into,调试窗口将从“Super App-entry”跳转到“Super App-entrytv”窗口,同时,代码也会跳转到调用实现的接口方法处,无需开发者手动设置断点。

打印日志

DevEco Studio的日志系统包括HiLog日志和FaultLog日志系统,其中:

  • HiLog日志系统:让应用/服务可以按照指定类型、指定级别、指定格式字符串打印日志内容,帮助开发者了解应用/服务的运行状态,更好地调试程序。
  • FaultLog日志系统:FaultLog是为了满足HarmonyOS应用/服务开发者基本的故障定位需求而设计,能够帮助应用开发者快速查询、定位、导出应用故障信息。

打印Hilog日志

输出日志

在输出日志前,需要先调用isLoggable确认某个domain、tag和日志级别是否被禁止打印日志。使用示例:

hilog.isLoggable(0x0000, "testTag", hilog.LogLevel.INFO);
  • 参数domain:用于指定输出日志所对应的业务领域,取值范围为0x0~0xFFFFF,开发者可以根据需要进行自定义。
  • 参数tag:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。
  • 参数level:用于指定日志级别。

hilog中定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别,并提供了对应的方法用于输出不同级别的日志,如下表所示:

表1 HiLog提供的主要接口

接口名

功能描述

debug(domain: number, tag: string, format: string, ...args: Array<Object>)

输出DEBUG级别的日志。DEBUG级别日志表示仅用于应用/服务调试。

可以在DevEco Studio的terminal窗口或cmd里,通过命令“hdc shell hilogcat”设置可打印日志的等级为DEBUG。

info(domain: number, tag: string, format: string, ...args: Array<Object>)

输出INFO级别的日志。INFO级别日志表示普通的信息。

warn(domain: number, tag: string, format: string, ...args: Array<Object>)

输出WARN级别的日志。WARN级别日志表示存在警告。

error(domain: number, tag: string, format: string, ...args: Array<Object>)

输出ERROR级别的日志。ERROR级别日志表示存在错误。

fatal(domain: number, tag: string, format: string, ...args: Array<Object>)

输出FATAL级别的日志。FATAL级别日志表示出现致命错误、不可恢复错误。

  • 参数domain和tag应与isLoggable中使用的一致。
  • 参数format:格式字符串,用于日志的格式化输出。格式字符串中可以设置多个参数,例如格式字符串为“%s World”,“%s”为参数类型为string的变参标识,具体取值在args中定义。每个参数需添加隐私标识,分为{public}或{private},默认为{private}。{public}表示日志打印结果可见;{private}表示日志打印结果不可见,输出结果为<private>。
    调试时可以通过命令“hilog -p off”指令,关闭隐私开关,明文显示private日志内容。
  • 参数args:可以为0个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。

以输出一条INFO级别的信息为例,示例代码:

hilog.info(0xFF00, "testTag", "%{public}s World %{public}d", "hello", 3);

该行代码表示输出一个普通信息,格式字符串为:”%{public}s World %{public}d”。其中变参"%{public}s"为公共的字符串;%{public}d为公共的整型数。

查看日志信息

DevEco Studio提供了“Log > HiLog”窗口查看日志信息,开发者可通过设置设备、进程、日志级别和搜索关键词来筛选日志信息。搜索功能支持使用正则表达式,开发者可通过搜索自定义的业务领域值和TAG来筛选日志信息。

根据实际情况选择了设备和进程后,搜索标签“testTag”进行筛选,得到对应的日志信息。

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

结果输出:

10-27 10:07:04.456 20680-20939/com.example.myapplication I 0FF00/testTag: hello World 3
  • 20680-20939表示进程的进程ID和线程ID。
  • com.example.myapplication表示应用进程名。
  • I表示日志级别为INFO。
  • testTag为开发者自定义的日志标签。
  • 日志内容中显示将实际取值填入字符串的结果。

HiLog窗口左侧各个按钮的作用为:

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

:单击该按钮可以向上翻页,日志窗口取消自动滚动。

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

:单击该按钮可以向下翻页,日志窗口取消自动滚动。如果翻页已到底部,日志窗口自动滚动。

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

:当该按钮处于选中状态时,日志自动换行显示,否则日志按行显示。

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

:当该按钮处于选中状态时,日志自动滚动到窗口底部,否则停留在当前日志显示处。

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

:单击该按钮可以重新开启日志接收,会清空日志缓存和窗口日志。

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

:单击该按钮可以清空窗口日志。

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

: 单击该按钮可以对当前选择的设备屏幕进行截屏,并保存在本地。不支持对包含密码输入的界面进行截屏。

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

:单击该按钮可以保存日志缓存到指定文件。

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

:自动选择和切换已连接的设备。

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

:过滤只展示App日志。

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

:单击该按钮可以关闭当前日志窗口。

日志打印实例

在按钮中增加一个单击事件,单击按钮时打印一条日志。

说明

本示例采用ArkTS语言为例,使用JS语言开发仅在UI部分代码有所不同,hilog部分代码通用。

  1. 新建一个工程,选择“Empty Ability”。
  2. 工程配置界面中,Model选择“FA ”、Language选择“ArkTS”。
  3. Project窗口单击“entry > src > main > ets > MainAbility > pages ”,打开工程中的“index.ets”文件,添加一个按钮,点击按钮打印日志。
    示例代码如下:

// index.ets

import hilog from '@ohos.hilog';

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        // 添加按钮,以响应用户点击
        Button() {
          Text('Next')
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#0D9FFB')
        .width('40%')
        .height('5%')
        // 跳转按钮绑定onClick事件,点击时打印日志
        .onClick(() => {
          hilog.isLoggable(0xFF00, "testTag", hilog.LogLevel.INFO);    
          hilog.info(0xFF00, "testTag", "%{public}s World %d", "hello", 3);
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
  1. 在真机/远程模拟器上运行该工程,单击应用/服务界面上的“Next”按钮。
  2. 在DevEco Studio的底部,切换到“Log”窗口,设置日志的过滤条件。选择当前的设备及进程,日志级别选择Info,搜索内容设置为“testTag”。此时窗口仅显示符合条件的日志。

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

打印FaultLog日志

FaultLog是由系统自动从设备进行收集,包括如下四类故障信息:

  • App Freeze
  • CPP Crash
  • JS Crash
  • Java Crash

FaultLog故障信息如下图所示,支持按照应用包名进行过滤、日志刷新、日志导出等功能。

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

如上图所示,FaultLog故障信息左侧按照应用/服务包名 > 故障类型 > 故障时间结构组成,选中具体的故障日期,则会在右侧展示详细的故障信息,便于开发者进行故障定位。




文章转载自:​​https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ide-debug-hilog-0000001172459337-V3​

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