无语!整个组都不用debug,直接看log,代码也靠硬看~

userdebug版本或者user版本默认开启mtklog 有时候我们需要第一次开机的时候就开启mktlog,比如sim的初始化或者是一些需要第一次开机就抓取的log我们就要用到,这是后就会生成一些.boot文件,我们可以通过这些文件进行debug。 但是在mtk平台大多数情况userdebug或者user软件是不会默认开启mtklog的,那我们就需要通过修改代码来解决了,L版本之前的就不说了,平台太老了,其他平台如下: ... 阅读详情

最近在网上看到个帖子,有人问整个组都不用debug,直接看log,代码也是靠硬看,这正常吗?

图片

这位朋友担心系统崩了自己背锅。说实话,这个问题让我想起了自己刚入行时,差点儿因为这种操作直接被“送上天”。

# 调试的重要性

首先,不用debug直接看log,这种操作就像 开车只看后视镜,不看前方。东哥觉得,debug和log是两种不同的工具,各有各的用途。

图片

log记录下程序运行中的各种状态和异常,有助于我们追踪问题。

然而,debug可以让我们在程序运行时,随时查看变量的状态,单步执行代码,实时观察程序的行为。

举个例子,如果你的代码中有一个复杂的算法,单纯通过log你可能很难一下子找到问题所在。而通过debug,你可以一步步查看每一步的计算结果,精准定位问题。

# Arthas

说到调试工具,我不得不推荐阿里巴巴开源的Java诊断工具——Arthas。这个工具可以说是东哥的“神兵利器”,尤其是在排查线上问题时,简直是救命稻草。

图片

Arthas的强大功能包括:

  • 查看实时线程堆栈

  • 动态修改代码

  • 方法追踪

  • 监控系统性能

这些功能都是平时我们在调试时非常需要的,而且它支持线上环境,这点尤其让人安心。

# Arthas的使用

安装

安装Arthas非常简单,只需要下载并运行以下命令:

curl -L https://alibaba.github.io/arthas/install.sh | sh./as.sh

然后按照提示进行操作即可。

图片

查看线程堆栈

假设你的程序突然变慢了,你想看看是哪个线程在搞鬼。使用Arthas的thread命令,可以轻松查看所有线程的状态:

$ thread -n 3

这个命令会列出前三个最耗时的线程,帮助你迅速找到问题。

图片

方法追踪

有时候,我们想知道某个方法是如何被调用的,每次调用的参数和返回值是什么。这时,Arthas的trace命令就派上用场了:

$ trace com.example.Demo testMethod

这个命令会跟踪com.example.Demo类的testMethod方法,输出每次调用的详细信息。这样,我们就可以清楚地看到方法的执行情况。

动态修改代码

这功能可不是一般的强大。在不重启程序的情况下,直接修改代码,测试效果。用Arthas的redefine命令:

$ redefine /path/to/YourClass.class

只需要替换掉新的.class文件,即可看到修改后的效果。这个在生产环境中可是非常有用的,特别是紧急修复bug时。

代码示例

为了让大家更直观地了解Arthas的使用,东哥写了个简单的示例。

假设我们有一个简单的Java程序,如下:

public class Demo {
    public static void main(String[] args) throws InterruptedException {
        while (true) {
            sayHello();
            Thread.sleep(5000);
        }
    }

    public static void sayHello() {
        System.out.println("Hello, Arthas!");
    }
}

编译并运行这段代码:​​​​​​​

javac Demo.javajava Demo

接着,使用Arthas连接到这个Java进程:

./as.sh

查看当前JVM的线程:

$ thread

你会看到包含main线程的所有线程列表。接着,使用trace命令跟踪sayHello方法:

$ trace Demo sayHello

每次调用sayHello方法时,都会输出详细的调用信息。

# 硬看代码 vs 调试

有时候团队里确实存在“硬核”程序员,他们习惯通过阅读代码解决问题。不过,光靠“硬看”代码来排查问题,无疑会增加出错的风险。特别是在复杂系统中,出一个小问题就可能导致整个系统崩溃。

而debug工具和Arthas这样强大的诊断工具,能帮助我们更快、更准确地找到问题所在,避免不必要的“踩坑”。

# 小结

在工作中,灵活使用工具是提高效率和保障系统稳定的重要手段。虽然log能提供很多有价值的信息,但它无法取代debug的作用。

而像Arthas这样的诊断工具,则可以大大提高我们解决问题的能力,尤其是在生产环境中。

建议大家,不要仅仅依赖log,要学会使用各种调试工具,这样才能更好地保障系统的稳定运行,减少背锅的风险。

github.com/alibaba/arthas

Unity 3d 中Debug.Log和Print的区别。 Debug.Log和print是unity中常见的两种查找BUG,输出信息的方式。 Debug.Log 英文描述为:Logs message to the Unity Console. 解释:记录消息到unity控制台。 适用于整个程序。 平行的还有 Debug.LogWarning 和 Debug.LogError。 Debug.LogWarning 输出警告。 Debug.LogError 输... 阅读详情

相关推荐

Unity Debug.Log 性能分析

1.介绍 介绍Debug.Log , 主要是因为发现有些同学,对这个并不是很在意,可能以为只是打印到Unity控制台。当你发Release版本的时候,Unity并不会自动帮你禁用Debug.Log,Debug.Log会产生GC,非常影响性能(开启Unity Deep Profiler可以查看性能分析)。 Unity5.3提供手动关闭Debug功能 if (Debug.isDebugBuild...

Lee的博客 7777

C语言的 debug,log,try的区别和用法

哈。好久没有水技术贴了。这里讨论一下C语言的 debug,log,try的区别和用法。 log大家都知道,我先简单重复一下作用,log的目的是对程序运行态下,运行状态的一个记录。 debug是什么?debug就是debug哈。我仍然坚持一个原则,其他C 程序员是否坚持和我没关系。即,不使用IDE。不使用DBG。 不使用IDE的主要原因是没有好的IDE,同时很多debug的策略技巧,IDE也没

xk_qq的专栏 3199

[Unity]各种Debug方法笔记

无论是萌新还是Dalao,遇到Bug总是难免的(拒绝反驳) 所以一些好的Debug方法就显得尤为重要 这篇文章既写给自己,也给看到文章的大家一个参考 内容主(quan)要(bu)是脚本的Debug方法ps:如有出错漏记得以我能看到的方式指出wwwInspector好像不只是一个Debug方法首先(我)用的频率最高的东西,毫无疑问是Unity 的Inspector 可以看到有很多组件,因为这

Hyt的奇♂妙空间 1万+

Debug,一种程序开发人员必备的调试程序技能

为了避免这种问题,具体我们可以通过打开Dev-C++软件的 工具---->编译选项---->代码生成/优化---->连接器---->产生调试信息 设置为yes,如下图。对于使用Dev-C++这款编译软件来说,在进行Debug时会遇到一定的情况。调试时,黑窗口的闪退。在进入到调试的状态下点击左下角的添加查看按钮然后输入当前程序已有的且要查询的变量名,点击ok,就能够在左边框的调试中看到当前的变量的值。1.通过程序的调试能过更好的掌握程序的运行过程;2.定位问题的位置,提高我们解决问题的能力。

qq_17131933的博客 1197

Debug.Log、LogWarning、LogWarning三种打印方式有不同

void Start () { fn_LogError(); } void fn_LogError() { Debug.LogWarning("1111"); Invoke("LogWarning", 2f); } void LogWarning() { Debug.Log...

qq_43511290的博客 2726

【Unity3D游戏开发】之定制Debug.log输出 (八)

环境:Unity开发时会有很多的Debug.log输出测试 问题:最后游戏发布的时候,不希望在Produce发布环境也输出大量的日志,官方目前也没有正统的做法。 解决方法1: 重新封装 将Debug.log重新封装,自己添加开关。 using UnityEngine; using System.Collections; public class Debuger { st

Teng's world 2万+

项目不能debug,只能通过日志方法来调试

问题:项目不能dubug,之前这个项目没问题可以打断点,后来不知道谁改了什么东西不能打断点了,后来通过打印日志方法来进行调试,其他项目是可以打断点的,唯独这个项目不行。后面发现编译过后的代码和原代码对不上,一些变量改成了var1、var2;

Pure_Man_Ben的博客 247

[MTK录制GPS Debug Log]对于通常遇到的GPS问题,需要录制什么log,以及如何录制。

FAQ05622 [SOLUTION] 对于GPS问题,请提供mobile log和GPS debug log。    log 抓取办法如下: 【gps debug log抓取方法】 1. 进到工程模式,打开YGPS。 2. 点击“NMEA Log->Enable dbg2file [Need Restart]”按钮和“NMEA Log->Enable dbg2ddms [Nee

Zed_Faker的博客 2959

console.log()、console.info()、console.debug()的区别

console.log()、console.info()、console.debug()的作用都是在浏览器控制台打印信息的。使用最多的是console.log()。console.info()和console.debug()本质上与console.log()没有区别。是console.log()的另一个名字而以,可以理解为它们三个其实就是同一个,只不过名字不一样。其中,console.info()...

xishaoguo的博客 6万+

永磁同步电机矢量控制——电流内环前馈解耦策略

在采用永磁同步电机矢量控制时,ud和uq的指令值存在耦合项。需要对其进行解耦,目前,常用的解耦设计方法有前馈解耦、偏差解耦以及内模控制,本文主要分享电流内环前馈解耦控制策略。

a12312341ll的博客 8692

HyperLPR3车牌识别-Android-SDK光速部署与使用

基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.快速部署AndroidSDK

tunm 6120

关于Debug.Log的一点儿小知识

今天同事在接腾讯Bugly异常上报SDK时,涉及到了一些关于Debug.Log的问题,所以就又回顾了一下官方的文档 在Unity当中,我们输出Log都会使用Debug.Log,Log的类型分为以下几种: Log--常规日志 Warning--警告日志 Assert--断言 Error--错误 Exception--异常 也可以按照日志的严重程度来排列 对应的API: Debug.Log("regular log"); Debug.LogWarning("...

chqj_163的专栏 8976

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 413

Debug.Log的妙用

Debug.Log static functionLog(message: object): void; static void Log(object message); static defLog(message as object) as void static functionLog(message: object,context: Object): void; stat

czlilove的专栏 9004

LangGraph实战:用Plan-and-Execute模式5步搭建智能问答机器人(附Tavily搜索集成)

本文详细介绍了如何利用LangGraph的Plan-and-Execute模式,通过规划、执行、动态调整三个核心阶段,构建一个能够处理复杂多步骤问题的智能问答机器人。文章提供了从环境配置、状态管理到核心节点(规划、执行、重新规划)实现的完整实战指南,并集成了Tavily搜索工具,展示了如何将智能任务规划应用于实际信息查询场景。

weixin_29258297的博客 341

FC游戏Hack实战:从零开始修改游戏数据

本文以《忍者神龟3》为例,详细介绍了从零开始进行FC游戏Hack的完整实战流程。通过使用FCEUX模拟器和调试器,结合“递减法”精准定位生命值内存地址,并利用十六进制编辑器修改关键指令,最终实现“无限生命”效果。文章旨在引导读者理解游戏数据修改的核心原理与操作技巧,重温经典的同时深入计算机程序运行机制。

weixin_28366353的博客 358

关于Debug.Log的一点小知识

https://www.fgba.net/sitemap.xml

august5291的博客 4297

AI爬虫:一文讲通AI爬虫技术和原理,及34个AI爬虫工具推荐

AI 爬虫 是一种结合了传统网络爬虫技术和人工智能(AI)技术的工具,能够更智能、高效地从网页中提取和处理数据。与传统爬虫相比,AI 爬虫能够更好地处理动态内容、复杂网页结构以及非结构化数据,同时具备数据清洗、分类、情感分析等高级功能。

数据知道的博客 1万+

React-native调试小技巧,在Logcat输出console的log,不用摇晃也能弹出Debug 弹窗

当初新学React-native的时候,也是感觉一脸懵逼,只能看官网,看视频,去找qq群,没人帮助自己。一点一点肯,慢慢的跳坑,然后再跳出来,学到现在,也不敢说能参透notejs的原理,但是 我会把自己遇到的一些小技巧记下来,方便后人采纳。 很多新手好比调试网络接口的时候会很苦恼,为什么呢? 一是因为对fetch的不熟悉,不知道这样写对不对,想通过打log的方式去看看程序执行的过程,但是reac...

hahahhahahahha123456的博客 1606

【C语言笔记初级篇】第一章:C语言快速入门及注意事项

(1)第一个C语言程序 A:利用vs2010写C语言程序 1:按以下步骤新建工程 2:添加源文件,“.c”文件 B:第一个C语言代码 1:以下是基本的C语言程序 2:由于没有设置连接器,所以打印结果没有显示,按照如下步骤链接控制台 (2)数据类型 A:基本数据类型及占用字节 B:一些概念的梳理 概念一:关于计算机的单位 位(bit):计算机通过电路的开关和闭合处理信息,电路通...

快乐江湖的博客 3737

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

伶俐角少儿编程 484

Unity 中 Debug.Log 和 print 两种打印方式的区别

原文地址 : https://blog.youkuaiyun.com/qq_42351033/article/details/83990499 这是【Unity3D 教程系列第 8 篇】,如果觉得有用的话,欢迎关注专栏。 先写个脚本 “PrintAndDebug”,挂在 Main Camera 组件上,在脚本的 Start 函数里通过这两种方式打印一段内容 然后运行 unity,控制台打印日志如下图 在这里可以明了的看到 Debug.Log 是直接打印出来的,而 print 是继承自 MonoBehaviour 的

kaixinjiaoluo的博客 2984

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Unity 中 print 和 Debug.Log 的区别

相同点: 二者都能将字符串信息打印到 Unity 编辑器的 Console 控制台上。 二者都来自 UnityEngine 命名空间。因此在使用它们之前要确保 using UnityEngine; 不同点: print 方法来自于 MonoBehaviour 类。因此要想在当前类使用 print 方法,需继承自 MonoBehaviour 类。 使用 Debug.Log 无需继承自 MonoBehaviour 类。 ...

qq_46044366的博客 8213

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android开发:gradle自定义BuildConfig.DEBUG实现在debug模式下输出Log日志,release环境下不输出Log

因为做android开发,我们程序员都需要经常在程序里面去打印日志。但是一旦我们项目做完上线之后这些日志就不在需要打印了,因为它可能影响性能之类的。你可以在上线之后删掉,但这样做有缺点。1.你得一行一行的删,不知道要删到猴年马月,头发又会少了一撮 2.如果项目上线了发现有bug需要返工,然后你发现日志都被你删完了,然后你就原地爆炸。 所以做android开发我们可以在build.gradle...

一个程序员-二白的博客 3239

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

封装Debug.Log 游戏发布关闭 Log 减少性能消耗

在游戏发布时,有很多东西需要进行优化 ,消耗性能的东西 能减少就减少。 UnityEngine.Debug.Log 是很消耗性能的操作,即使我们选择的是Release 版本发布,这个函数仍然会执行并且输出Log ,不仅影响性能,还有可能泄漏隐私。所以我们在发布上线时会关掉Log。 比如下面这段代码: ? 1 2 3 4 5

小kobe的博客 1911
上一篇: 还得是 Edge步子大,Chrome 盼了多少年的功能被它先上了!
下一篇: 居然用ChatGPT电话面试,被我识破了!
IT界那些事儿
博客等级 码龄6年 2万+粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值