首页 > 其他分享 >鸿蒙开发实战:智能日志定位与高效调试技巧

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

时间:2024-11-14 08:46:42浏览次数:1  
标签:cyhh 鸿蒙 partleft 代码 const 日志 com 调试

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

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

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;

}
cyhh.zjbhzs.com,cyhh.lovehua99.com,cyhh.re-shake.com
cyhh.zcyxsm.com,cyhh.qcbysq.com
}

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

// 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打印日志

}
}
cyhh.jiaforhui.com,cyhh.bjyins.com,cyhh.chinabgroup.com
cyhh.wekochat.com,cyhh.hndsedu.com

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

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

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

标签:cyhh,鸿蒙,partleft,代码,const,日志,com,调试
From: https://www.cnblogs.com/bkbk1234/p/18545240

相关文章

  • 鸿蒙 Next 元素定位
    在鸿蒙next中,子元素想要相对于父元素定位会使用到.opsition()这个属性,用法如下:@Entry@ComponentstructPositionExample1{build(){Column(){Row(){}.position({x:50,y:50})}.width('100%').height('100%')}}cbwe.hgyb0831.com,cbwe.bochendoor.c......
  • 世界第一大厨-冲刺日志(第二天)
    冲刺日志-第二天①冲刺分工与进度更新成员完成的任务完成任务的时长(小时)剩余时间(小时)杨美荔任务分配与进度跟踪1.50张静雯主界面细节优化3.51.5郭心怡大厨日记页面功能完善52王勤琛食谱广场页面功能增强53王子聪功能美化与细节调整85.5......
  • 旺仔水饺-冲刺日志 Day2
    作业所属课程https://edu.cnblogs.com/campus/fzu/SE2024作业要求https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称旺仔水饺102201140黎曼102201138黄俊瑶102201127罗永辉102201130郑哲浩102202144傅钰102202147赖越1722090......
  • 使用clion远程调试
    一、前言openGauss数据库默认在linux系的操作系统上编译和运行,要想可视化调试运行,要么换linux系的桌面系统、要么在命令行使用gdb进行调试。而我习惯使用windows办公,所以非常想通过clion远程调试功能来实现在windows上的openGauss开发与调试。对比gdb,可以在调试的时候直接查看或......
  • RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段
    ......
  • Qt | 串口调试工具实现
    点击上方"蓝字"关注我们01、QSerialPort>>>QSerialPort是Qt框架中的一个类,用于串行通信。它提供了一个简单的接口,允许开发者通过串口与外部设备(如传感器、相机、单片机等)进行数据交换。QSerialPort支持多种串口操作,可以方便地设置波特率、数据位、停止位和校验位等通......
  • 鸿蒙高质量代码静态检测200条四
    @cross-device-app-dev/font-size字体大小要求至少为8fp以便于阅读@cross-device-app-dev/grid-columns-span不推荐开发者将栅格中所有的GridCol子组件只设置span属性,且值与父组件的columns属性相等@cross-device-app-dev/grid-span-value在栅格布局组件GridCol中......
  • 高性能日志结构化引擎 — GreptimeDB Piepline 设计与实现技术揭秘
    在GreptimeDBv0.9版本我们加入了对日志相关的支持:Pipeline引擎和全文索引。GreptimeDB致力于成为统一处理指标(Metric)、日志(Log)、事件(Event)和追踪(Trace)的时序数据库。在v0.9之前,用户虽然可以写入文本(string)类型的数据,但无法进行专门的解析和查询。有了Pipeline引擎和全文......
  • SpringBoot医院管理系统5nr0z--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着医疗技术的不断进步和医疗需求的日益增长,医院管理面临着前所未有的挑战。传统的医院管理方式已难以满足现代医疗服务的需要,存在信......
  • SpringBoot医疗信息共享平台k09w0(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着信息技术的飞速发展,医疗领域正逐步迈向数字化、智能化。医疗信息共享平台作为连接医疗机构、患者及医疗数据的关键纽带,对于......