如果你的代码悲剧了,你的日志能帮你成为福尔摩斯吗?

DBA的新领域:调试Oracle(进阶篇) Author:  Lv, Haibo 摘要:调试Oracle的意义 ---- 无限风光在险峰 我把用DTrace和mdb,分析、研究Oracle称为“调试Oracle”,这是一个新的领域。它比传统DBA要求更高,除掌握Oracle内部原理外,它也要求更多的计算机底层知识,因为个别时候,我们需要到反汇编代码中,一探研究。那么究竟调试Oracle技术可以为DBA带来什么改变呢?本文想给各位 阅读详情

 作者:Henrik Warne

翻译:童角大王

所有程序都需要一些记录日志的方法,这样我们才可以观察它的运作状况。当程序出现错误时,这样的未雨绸缪就非常重要了。

好程序员和坏程序员之间的一个不同点在于,优秀的程序员会记录有用的日志以及增加方便调试程序的工具。

当程序工作如常,通常无法体现出日志的重要性。可是一旦程序出错,或者得到了错误结果,优秀的程序员就会脱颖而出。

案例1

一个测试人员跑来向我报告一个测试用例失败,我们一起检查日志,发现问题似乎出在另一个模块之中。一个本该返回数组的函数却只返回了null值。

当我们把嫌疑模块的日志打开,再次运行测试用例,却没有发现新的线索——是因为传递了错误的参数,还是外部系统的运行失败,或是一个被引用的模块出现错误?或者是什么别的原因?

我们去询问这段代码的责任人,他会回答到:“奥,那我们得加上日志,弄一个调试版本,再部署一次,看看到底是怎么回事。

这是大错特错的,对于已经部署到生产环境的程序,增加,部署调试版本可能是一件工程量浩大的工作!代码需要包含足够的日志信息,当调试模式打开时,就可以通过日志来判断为什么出错了。

案例2

我曾经开发过一个软件,它可以根据你手机目前所处的位置以及接收者运营商的不同,帮助你找到发送短信的最短(代价最低)路径。

有些时候运营商会限制或推广一些传输路径,在这潜在的千百条路径中,我们的系统可以考虑到这些限制,并帮你找到最便宜的那一条。

假设有一条本该使用路径B的短信意外地通过路径A传输了,是什么原因导致的呢?如果没有其他的日志信息(除了“嘿兄弟,路径A被使用了”),我们就只能面对着上百种可能的路径,不同的花销,特别的限制和复杂的算法,傻眼了。

而在我们的产品实现中,会以花费的多寡为顺序,将可能路径都记录在日志之中。因为各种限制的存在,有些路径会被筛选掉,这些路径以及被筛选的原因也会被记录在日志中。根据算法所接受的输入,以及在日志中列出的步骤,你可以更容易地看出为什么一条路径会被选中。

那么问题来了, 为什么有些程序员不写包含足够日志的代码呢?我觉得有三条原因:

1. 可能没有意识到代码总是会出错,我相信很多程序员都需要经历一些事情才会认清这个现实。

2.  自己没有做彻底的测试,如果你做过的话,你可以确定代码在哪些场景成功,在哪些场景“优雅地”失败。在这些场景,你自然会添加有效的调试日志。如果你没有做足够的测试,你也不大可能会添加日志。

3. 许多程序员还没有在生产环境中给代码排错的经历,如果生产环境有问题,而日志却不能给你提供线索,这样的血与泪会激励你以后一定要乖乖写日志。

当然,在不少情况下,就算拥有记录良好的日志信息,你也无法彻底了解为啥事情失败了。也许你还是需要部署一个新的调试版本。但是如果你的调试日志足够好,至少可以帮你缩小问题的范围。

所以大兄弟,你准备好了吗?如果你的代码悲剧了,你的日志能助你成为名侦探吗?欢迎里留言讨论!

原文地址:

https://henrikwarne.com/2013/05/05/great-programmers-write-debuggable-code/

640?wx_fmt=gif


码农翻身公众号开放投稿,可能是全网最高片酬:

用故事讲技术 ,稿费1000

技术/职场/感悟/面试等,稿费700

翻译类文章,每千字200

联系方式:onlyliuxin97(微信)

详情猛戳: 可能是全网最高片酬,速来!

往期精彩回顾

我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

负载均衡的原理

阅读源码的三种境界

640?wx_fmt=jpeg

5大难题+实战:Java容器日志,从‘黑洞吞日志’到‘故障克星’的逆袭全攻略! Java容器化日志管理:告别混乱,精准追踪 问题痛点:容器日志分散、格式混乱,导致故障排查困难、存储成本高。 解决方案: 结构化日志:使用Logback+JSON格式,结合MDC上下文,让日志像“电子病历”一样清晰记录。 日志聚合:通过Fluentd+ELK(Elasticsearch, Logstash, Kibana),统一收集与分析日志。 实时监控:集成Prometheus+Micrometer,实时预警系统异常。 智能分析:利用Elasticsearch+Kibana快速定位问题,提升运维效率。 核 阅读详情

相关推荐

5大痛点+实战:C#云原生日志,从‘日志迷雾’到‘故障神探’的逆袭指南!

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。

java专栏 851

编程第一法则

编程第一法则:如果你的代码以某种莫名的方式运行起来了,就不要碰它了。

不吃熊的草莓 4747

SpringBoot+Vue+Mysql社区医院信息平台(源码+文档)

SpringBoot+Vue+Mysql学生宿舍信息管理系统 WEB端软件项目(源码+文档) 项目包含:①完整源码(后端+管理后台+用户前台);②数据库脚本文件;③万字论文文档;④开题报告;⑤答辩PPT;⑥项目运行视频教程。 项目架构: B/S 架构、MVC 分层设计 技术栈: Java、MySQL、SpringBoot、MyBatis-Plus、Token 权限校验、管理后台 Vue+ElementUI+ECharts、用户前台 Layui+jQuery、Maven 构建。 一、角色设计 学生用户: 注册登录、浏览宿舍信息、查询宿舍安排、在线报修、缴费查询、失物招领、桶装水预订、评论交流、收藏等。 商家用户: 注册登录、桶装水品牌与商品信息维护、预订订单查看与处理。 维修人员: 注册登录、查看待处理报修、接单维修、填写报修处理结果与进度反馈。 管理员: 学生管理、班级管理、宿舍信息管理、宿舍安排管理、报修处理管理、缴费信息管理、卫生检查与文明宿舍管理、失物招领管理、桶装水与商家管理、维修人员管理、公告资讯与轮播图管理等。 二、前台功能模块(学生端) 1. 首页展示:轮播图、宿舍公告、最新动态推荐、常用服务快速入口 2. 宿舍信息模块:宿舍列表、楼栋与房间条件筛选、宿舍详情查看、我的宿舍安排查询 3. 在线报修模块:在线提交宿舍设施报修申请、上传故障描述、查看报修进度与维修处理结果 4. 缴费模块:水电等缴费记录查询、缴费状态查看 5. 卫生检查与文明宿舍:宿舍卫生检查结果公示、文明宿舍展示 6. 失物招领模块:失物信息发布、招领信息发布、详情查看、评论互动 7. 桶装水预订:桶装水品牌与商品浏览、在线预订、我的预订记录查询 8. 假期留宿:假期留校申请提交、申请记录查询 9. 评论与收藏:信息评论、查看他人评论、评论回复互动、收藏感兴趣的内容 10. 个人中心...

为什么程序员都会告诉你,代码能跑就不要动?

大家都知道,这是编程的第一法则:如果您的代码以某种莫名方式跑起来了,就不要再碰它了。 系统非常稳定,代码不要随便动: 如果第一个程序员没考虑太多,用了if else。新需求出现时,后面接受的程序员不愿意重新建构,都往后面加if else。 一年又一年,一代又一代,从“粪球”到“屎山”,大概你能做的就是以“屎”盖“屎”,只要代码能跑起来就是大胜利。 其实也不是所有人都不想修正代码,最可怕的是,你只删了一行代码,整个程序就跑不动了,而且原因你可能根本想不到。本以为把它的爸爸妈妈解决掉就.

Yuki1127918的博客 2万+

YOLOv8作物病害检测实战源码

这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

35个毁掉你代码的不良习惯!

坏习惯很难改变,如果你不知道你的坏习惯正在影响工作,那就更难。如果你知道,但不在乎——这是最糟糕的情况。但好在你已经来这里看了,不是吗?  作为一个程序员,我看到很多不好的做法,不仅仅与代码相关,还包括团队合作能力。我自己曾经就有不少这些坏习惯。这里是我认为最糟糕的 35 个坏习惯,它们涵盖了四大类:组织代码、团队合作、编写代码以及测试和维护。! 组织代码 1.说“我

科技男 584

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

前辈经验分享:Linux后台开发调试

毕业超过十年了,感慨岁月无情。做了若干年后台开发(之前做电信领域),大致说一下常见的开发心得和调试手段。使用互联网这么多年,收获的很多,总结的很少。本着互联网的精神,希望可以帮到互联网另一端的你。由于本人是做 C 语言的开发,陈述的经验也是 C 常用的调试手段。调试这个蛋疼的事情,困扰这无数程序猿么。很难有人保证自己写的代码一行错误都没有,有问题你就要查。怎么查?高手者,反汇编,看 2 进制;low 一点的就 gdb、看统计;在 low 就加打印。还可以在 low 吗?可以,自己写 bug,别人查。

j简说Linux的博客 471

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ICD10 openGauss版

ICD10 openGauss版

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

上一篇: 一个30岁男人转型码农的平凡之路
下一篇: 想找到女朋友,你得掌握这些算法
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值