鸿蒙开发实战:智能日志定位与高效调试技巧

前言

在鸿蒙系统的开发过程中,日志定位是一个关键的调试步骤。想象一下,如果你能够轻松地在繁杂的代码中快速定位到日志产生的位置,那将会极大地提高你的开发效率。今天,我将分享一套代码,它能帮助你实现这一目标。

效果展示

当你使用这套代码时,日志的打印效果将如下所示:

截屏2024-05-08 15.04.24.png

W     1234 at (entry/src/main/ets/entryability/EntryAbility.ets:20:0) 具体日志内容...

这样,你一眼就能看出日志是在哪个文件的哪一行产生的。并可以点击这行日志,快速的跳转到代码指定位置。

如何开发

首先,我们需要定义一个名为UStack的类,该类的主要功能是从堆栈信息中提取并裁剪出我们需要的部分。

// UStack.ts
export class UStack{

  public static getStackClassInfo(pos :number,l:number):string|null{
    try {
      // 创建一个新的错误对象来获取栈信息
      const error = new Error();
      const stack = error.stack || ''; // 确保stack存在

      const lines = stack.split('\n'); // 按照换行符分割栈信息

      if(lines.length>pos){
        let line = lines[pos];
        const parts = line.split(':');
        if (parts.length > 2) {
          let partleft = parts[0];
          let left = partleft.indexOf('(')
          partleft = partleft.substring(left,partleft.length)
          // 重新组合行信息
          line = "at " + partleft + ':'  + l.toString() + ':0)';
          return line;
        }
      }
    } catch (e) {
      // 处理任何可能出现的错误
      console.error('Error while processing stack trace:', e);
    }
    return null;
  }

}

使用方法

接下来,我们可以封装一个日志方法,用于打印带有位置信息的日志。

// Log.ts
class Log {
  /**
   * 打印带有位置信息的警告日志
   * @param customLine 自定义的行号(通常与打印日志的代码行相同)
   * @param tag 日志标签
   * @param args 日志内容
   */
  public static warnToLoc(customLine: number, tag: string, ...args: any[]): void {
    
    const stackInfo = UStack.getStackClassInfo(2,line);
    if (stackInfo) {
      args.unshift(stackInfo); // 将位置信息添加到参数列表的最前面
    }
    console.warn(tag, ...args); // 使用console.warn打印日志
  }
}

使用示例
在你的代码中,只需要调用Log.warnToLoc方法,并传入自定义的行号、标签和日志内容即可。

Log.warnToLoc(17, "abc", "wwwwww"); // 假设这行代码位于文件的第17行

注意:由于JavaScript(以及鸿蒙的ETS)在编译后可能会改变代码的结构,导致行号与实际位置不匹配。因此,这里的customLine参数需要手动指定为调用warnToLoc的代码所在的行号。目前尚没有一种方法可以完全自动地获取到准确的行号。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二蛋和他的大花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值