一文彻底拿下HarmonyOS NEXT开发实战调试技巧

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、嵌入式、鸿蒙、人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!


1.预览+日志的方式debug

这种方式只能进行基本数据类型的打印,适合简单调试

  • 原始类型,也就是非字符串需要String() 或者 .toString()
  • 对象类型,需要JSON.stringify转换
  • 预览器-没事,模拟器-打印必须加前缀 否则找不到

代码示例:

@Entry@Componentstruct Index {  //记录 点击次数  @State cs: number = 1  build() {    Column() {      Text('点击次数=' + this.cs)            Button('打印调试').onClick(() => {              this.cs++                // console.log(this.cs)  报错?为什么呢?        console.log(this.cs.toString())        console.log(String(this.cs))        // console.log({id:1,age:22}) 报错?        console.log(JSON.stringify({ id: 1, age: 22 }))        // 模拟器必须加前缀        console.log('Feri ' + this.cs)      })    }  }}

2.断点调试

以模拟器为例,具体实现步骤:

第一步:编码

@Entry@Componentstruct Index {  @State message: string='Hello World'   build() {    Row(){      Column() {        Text(this.message)        .fontSize(50)        .fontWeight(FontWeight.Bold)      }      .width("100%")    }    .height("100%")  }}

第二步:打断点

[图片上传失败...(image-fad689-1742777309331)]

第三步:点击右上角开始调试

点击Debug图标,开始调试。如果您的应用已经在运行,请点击Attach Debugger to Process图标!

当应用运行到代码处,会在代码处停住,并高亮显示。

[图片上传失败...(image-4ff415-1742777309331)]

Debug相关功能键使用

| 按钮 | 名称 | 功能 | 快捷键 |
| | | | |
| [图片上传失败...(image-3c760e-1742777309330)]

| Resume Program | 当程序执行到断点时停止执行,单击此按钮程序继续执行。 | F9(macOS为Option+Command+R) |
| [图片上传失败...(image-ef9c4b-1742777309330)]

| Step Over | 在单步调试时,直接前进到下一行(如果在函数中存在子函数时,不会进入子函数内单步执行,而是将整个子函数当作一步执行)。 | F8(macOS为F8) |
| | | | |
| [图片上传失败...(image-a5a6b1-1742777309330)]

| Step Into | 在单步调试时,遇到子函数后,进入子函数并继续单步执行。 | F7(macOS为F7) |
| | | | |
| [图片上传失败...(image-cffce1-1742777309330)]

| Force Step Into | 在单步调试时,强制进入方法。 | Alt+Shift+F7(macOS为Option+Shift+F7) |
| | | | |
| [图片上传失败...(image-88ccbf-1742777309330)]

| Step Out | 在单步调试执行到子函数内时,单击Step Out会执行完子函数剩余部分,并跳出返回到上一层函数。 | Shift+F8(macOS为Shift+F8) |
| [图片上传失败...(image-ff83bd-1742777309330)]

| Stop | 停止调试任务。 | Ctrl+F2(macOS为Command+F2) |
| | | | |
| [图片上传失败...(image-9280b8-1742777309330)]

| Run To Cursor | 断点执行到鼠标停留处。 | Alt+F9(macOS为Option+F9) |

3 hilog实战使用

在应用开发过程中,可在关键代码处输出日志信息。在运行应用后,通过查看日志信息来分析应用执行情况(如应用是否正常运行、代码运行时序、运行逻辑分支是否正常等)。

系统提供不同的API供开发者调用并输出日志信息,即HiLog与console。

hilog日志打印最多打印4096字节,超出限制文本将被截断。

具体示例代码如下所示:

import { hilog } from '@kit.PerformanceAnalysisKit';@Entry@Componentstruct Index {  build() {    Column() {      Button('打印调试').onClick(() => {        // 铺垫1:十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的进位制。通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F表示10~15,这些称作十六进制数字。        // 铺垫2:计算机信息都是0和1表示的也就是二进制,单对于人类来说二进制太长 -> 需要做精简,因此转化为十六进制 hexadecimal 简称 hex        // 铺垫3:在 C 语言中,十六进制数以”0x”或“0X”开头,A表示10,F表示16。        // 铺垫4:此后00000000~11111111就可以用0x00~0xFF来表示了。        // info函数第1个参数  domain:用于指定输出日志所对应的业务领域,取值范围为0x0000~0xFFFF,开发者可以根据需要进行自定义。 例如win蓝屏代码0x00000ffff是一个错误代码        // info函数第1个参数  tag:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。tag最多为31字节,超出后会截断,不建议使用中文字符,可能出现乱码或者对齐问题。        hilog.info(0xFF00, "slj", 'hello');      })    }  }}

封装起来用相对方便后期维护

实战推荐@open/log

示例代码,如下所示:

ohpm install @open/log import log from '@open/log';log.info(数据)

好啦,关于HarmonyOS NEXT开发实战调试技巧就说到这里啦。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容