加强debug能力来提高工作效率

简介:

以我的观点来看:做出一个业务功能是件很简单的事,做好则有难度,高效的做好则是难上加难。抛开前期的架构设计、技术方案的制定不谈,单单是写好代码这一阶段就给我们每个人带来了不同程度的挑战。之前还写过一篇关于代码编写阶段的文章《提高工作效率的工具“类”》,下面我就主要从代码debug的角度来谈谈我的看法。


  • 尽量写代码时避免bug,减少调试
    对于任何问题,先以预防为主。在团队中常常可以遇见这样的同事,代码写的非常快,可是天马行空的代码之后却让自己陷入了无尽debug的沼泽。我会给这样的同事建议:多花点时间做好代码结构的设计,写代码时经常进行review,另外就是老生常谈的细心。

  • 利用好IDE和工具
    常常听到这样的看法,用vim,emacs的看不起用IDE的,觉得vim..就是银弹,不管什么语言,什么平台只要你问他什么IDE最好,他一定回答你vim..。当然不排除有能把vim..用的出神入化的人,其他的大多数是在装X吧。你要记住,你的目标是完成工作,不是显示自己多高端,多牛X。gdb同理。合适的IDE有很多好处:错误提示、代码补全、丰富的替换查找、各种关联跳转,当然如果你不嫌麻烦,不怕不准确也可以对vim进行配置来实现相同的效果,但请先看看这篇文章再做决定《编辑器与IDE》,以上几个IDE带来的好处不正好对我们上面提的“尽量避免bug”有很正面的意义嘛。另外,IDE集成的debug界面友好也强大(用过gdb的朋友肯定知道),断点,step over,step into,内存变量,调用堆栈...简直就是debug神器,至少我写程序读程序的标准步骤就是依靠这几步。(说点夸张的,但是我还确实遇到了不少人包括一些很多年工作经验的工程师竟然从没有用过断点调试,完全靠着printf行走江湖,我的“惊讶”如滔滔江水啊...),在调试中其他工具的使用也可以使debug事半功倍,比如内存泄露的检测工具,还有进行网络编程时的各种工具(wirshark,netcat,tcpdump...)

  • 程序输出日志
    我认为日志系统也应该是一个程序的标准组成部分。其最大用处就是帮助我们来梳理程序行为,准确定位bug。有些朋友要问了,我可以用IDE来调试观察啊,问题是很多bug并不是在你写代码测试时发现的,是在发布之后的用户那里,傻眼了吧?还有很重要的一点,多线程问题、还有一些依赖于具体系统环境或时间环境的问题是很难复现的,这次抓不住你就等着一直提心吊胆吧。我在工作中一直使用Apache的log4X系列,又一个强大的神器。但在有些环境下用不了log4X,比如在有些对程序所占空间大小很敏感的的嵌入式环境(log4cxx的动态库较大),你完全可以自己利用标准输出封装相应的日志系统,然后运行时做好定向输出工作就好。

  • 崩溃转储
    崩溃这种fatal级的大bug最让我们头疼,在C/C++中十有八九是内存违例(段错误)造成的。这种bug和多线程问题一样也是最难找的,所以我们一定要尽可能的准确定位抓住它,最有效的办法就是利用内存转储文件。在linux平台下开启这个选项后利用gdb core就可以进行定位分析。windows平台下较麻烦,得自己实现内存转储功能,推荐大家一个工具类mini_dump,一旦程序崩溃就会产生dump文件,之后使用windbg调试即可。

  • google
    很多bug自己想了各种办法也定位不了或者无法fix,这时你就得请教google大神了。尽量别用百度,如果中文搜索条目很少或没有,换成英文搜索,也许会有更多的收获。


  • 我给我的团队成员提了这么一个建议:如果一个问题你自己尝试了,也google了,但是无法解决。一旦超过一个小时耗在这个问题上请大胆的寻求外部帮助吧,问团队中经验较丰富的成员,也许他曾经遇到过,也许他会给你提供好的建议或者思路。

  • 深入学习
    其实这点排在最前面比较合适,先去深入学习再去做相应的工作。但是我们实际工作中恰恰相反,往往是遇到了问题再去深入学习,我觉得很多bug的形成是我们对知识的一知半解甚至一无所知造成的,我们要尽量抛弃那种临时抱佛脚式的学习,而是要在自己的职业生涯中持续不断学习,深入学习。

以上就是我对提高debug能力的一些看法和实践。

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1210546如需转载请自行联系原作者


yaocoder


相关文章
|
1月前
|
监控 安全 搜索推荐
简化工作流程!邮件自动化如何助力Workplace操作高效化?
电子邮件在现代职场中扮演核心角色,不仅是通信工具,更是企业运营的关键。自动化驱动的电子邮件提高了效率,用于需求生成、流程管理和交易审批等。电子邮件自动化分为营销、事务性和操作性,各有特定触发器和目标,但也带来收件箱管理挑战。通过过滤、优先级设定和规则管理,收件人可更有效地处理自动化邮件。随着数字化转型,电子邮件将继续影响客户旅程和企业内部流程,未来的系列文章将进一步探讨这一主题。
14 1
|
2月前
|
IDE 小程序 JavaScript
6月开发者日回顾|IDE多功能更新,质量洞察、全息检测工具全新升级
6月开发者日回顾|IDE多功能更新,质量洞察、全息检测工具全新升级
24 0
|
1月前
|
机器学习/深度学习 测试技术 API
iOS系统下轻松构建自动化数据收集流程
iOS系统下轻松构建自动化数据收集流程
26 0
|
3月前
|
存储 供应链 机器人
自动化拣选系统
自动化拣选系统
43 2
|
3月前
|
人工智能 监控 安全
《机器人流程自动化能力评估体系 第1部分:系统和工具》行标发布
《机器人流程自动化能力评估体系 第1部分:系统和工具》(YD/T 4391.1-2023)是国内首部正式发布的RPA行业标准,标准的发布实施填补了我国RPA行业产品标准的空白,在相关行业发展中具有里程碑意义。
58 0
|
9月前
|
敏捷开发 数据可视化 Devops
SAFe实施流程—SAFe敏捷框架支撑工具
​ Leangoo领歌覆盖了敏捷项目研发全流程,包括小型团队敏捷开发,Scrum of Scrums大规模敏捷。 随着SAFe的越来越普及,Leangoo本次上线提供了完整的SAFe框架功能,包括:Program Backlog,PI规划,迭代规划,迭代执行,迭代统计等。
智能、高效、便捷问题定位利器 —— 应用诊断分析平台 ATP 上线
一款分析功能丰富、诊断能力完备的平台,帮助用户高效定位应用诊断性能、异常行为等问题。
智能、高效、便捷问题定位利器 —— 应用诊断分析平台 ATP 上线
|
Kubernetes Java 测试技术
|
数据采集 测试技术 Android开发
【精准测试】iOS 代码覆盖率数据采集自动化实践
《简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)》介绍了如何实现Android端的代码覆盖率接入,基于同样的背景我们也需要实现iOS端的代码覆盖率数据采集。
895 0
【精准测试】iOS 代码覆盖率数据采集自动化实践

热门文章

最新文章