在项目开发过程中,会发现有些时间会浪费在找bug,解决bug上,那么如何快速找到bug并解决掉它,是这篇博客的意义所在。
一.bug调试技巧
1. 直接看错误信息
拿php举例,php框架将最里层的错误信息一层一层向外递归抛出,最后由最外层将错误信息捕获并通 过模版将错误信息输出到页面,抛出的错误类型有:ERROR,WARNING,NOTICE,INFO,SQL..等等类型的错误,我们会看到页面上有一行最醒目的错误信息,还有下边有错误信息的调用堆栈过程,有经验的开发人看到这个就应该知道错误在哪里了,所以直接看输出的错误信息是最快最有效的解bug方法,如果看错误信息也找不到错误的位置,那继续往下看;
2.打印信息
(1)能锁定错误的范围但不知具体位置:
在你觉得很有可能会发生错误的地方打印信息,看是否与你想的结果一致;
(2)不能锁定错误范围:
1.使用二分法打印信息,在你实现该逻辑的代码中间打印结果看与你想的一样不,如果一样从输 出结果往后找,如果不一样往前;
2.在每个执行的结果处打印信息,比如其中调用了几个方法,打印每个方法返回的数据结果等, 该方法找问题是最慢的;
如果用php,可以用dump(),var_dump()等输出,如果是前端可以console.log()输出信息,
3.断点调试
像webStorm和phpStorm编辑器都有断点调试的插件,phpStorm可以安装Xdebug来进行断点调 试,该方法好处在于可以逐步查看运行过程,通过下一步可以查看每一步运行的结果,这样就可以很 快找到哪一步出现了问题;
4.知道问题并带着问题问会的人
如果你知道问题是什么,但不知道怎么解决,带着问题去问会的人,这个方法也是很快很有效的;
5.记日志
记录的日志是可以推演出bug发生的全过程,记日志一定要记原始数据和输出信息,尤其在调用第三方接口时,切记一定要记原始输入和输出信息!!!,如果不记出现问题你找都没地方找后果很严重。
日志记录方式:
1》原始的输入信息和输出信息:输入就是该方法接收的数据,输出就是该方法执行完程序返回的结果;
2》记错误信息:比如调用一个函数会返回成功或者失败的结果,一般会在返回错误结果的地方先记错误信息,输出错误信息然后结束程序;
3》记异常信息:记录try_catch抛出的异常信息,在项目开发过程中,我们可以自己写一个异常类继承php的异常类,这样就可以按照自己定义的格式捕获所有抛出的异常,并按照自己定义的错误模版输出错误信息,可以用面向切编程的思想(AOP)将记录异常信息日志这块抽离出来,当捕获到异常就会记录日志,我们可以直接去错误日志里看所有抛出的异常信息,如果是正式环境这样抽离没有问题能保证所有异常被捕获,但是开发环境的话调试起来可能不方便,所以异常继承的话最好判断一下是不是正式环境,如果是就继承,不是就不继承了这样方便我们调试查看异常信息。
以上就是我讲的bug调试技巧与日志记录方式的介绍。
相关推荐
嵌入式系统开发领域的码农们在面对bug调试时,有许多特有的技巧和经验需要掌握。本文将结合作者十年的嵌入式开发经验,分享一些在编码、测试和调试阶段减少bug的有效方法。 首先,嵌入式系统与传统PC软件的主要区别...
### .NET调试技巧详解 #### 一、调试的宗旨与信念 在.NET开发过程中,调试是寻找并解决软件错误的关键步骤。调试的核心理念在于“找到一切bug的根源”。这一信念鼓励开发者不仅要解决表面问题,还需要深入探究问题...
最后,作者强调了日志记录在理解程序行为和调试中的重要性。 在测试方面,作者强调了对边界情况的测试,包括零值、null值和错误情况的测试。作者认为,测试新功能时不仅要考虑添加过程,还应该考虑移除过程,以及...
7. **日志调试**:在代码中添加日志输出,记录关键步骤的变量状态和程序行为,对于追踪难以复现的问题特别有用。 8. **单元测试**:编写单元测试可以确保代码的各个部分按预期工作。工具如Google Test框架可以帮助...
2. **日志记录**:通过在代码中添加日志输出语句,记录关键数据和执行路径,以便于分析问题。 3. **单元测试**:编写针对特定功能模块的测试用例,确保每个部分都能按预期工作。 4. **集成调试器**:大多数现代IDE都...
日志记录了程序运行时的状态,对于理解程序的行为非常有帮助。 在使用日志进行调试时,我们需要遵循以下步骤: 1. **日志级别设置**:根据需求选择合适的日志级别,通常包括DEBUG、INFO、WARNING、ERROR和CRITICAL...
在编程领域,调试是开发过程中不可或缺的一环,尤其对于使用...总之,熟练掌握VC++的调试技巧对于优化代码、查找和修复bug至关重要。不断实践和探索各种调试方法,将有助于提升编程技能,从而编写出更高质量的软件。
【Python技术代码调试...综合运用以上调试技巧,开发者可以更有效地调试Python代码,提高工作效率,减少bug的存在,从而提升软件的稳定性和可靠性。在实际开发中,应根据项目需求和个人习惯灵活选择适合的调试方法。
标题:“内核208天bug分析”描述:“腾讯大神写的内核timer调试笔记,典型的208天才重现一次的bug调试技巧” 知识点: 1. 内核bug现象:从描述中提到这是一个典型的内核bug,该bug表现形式为每208天重现一次,这种...
总之,良好的调试技巧能够显著提升软件开发效率,减少bug的存在,保证软件的稳定性和可靠性。不断学习和实践这些雕虫小技,不仅可以提升个人技能,还能在团队协作中更好地沟通问题,共同推动项目的成功。
通常,这是一个学习和成长的过程,涉及到理解代码逻辑、调试技巧的运用,以及如何使用版本控制系统如Git来管理代码更改。初学者可能会遇到诸如逻辑错误、语法错误或者对API理解不准确等问题,而解决这些问题的过程...
### 软件工程与软件调试技巧 #### 第1章:软件工程概述 **软件工程定义**: - **定义**:软件工程是一种采用系统化、规范化的管理方法来进行软件的开发、运行和维护。 - **目标**:提高软件质量和生产率。 - **...
3. **日志分析**:日志记录是调试的重要辅助手段。通过配置合适的日志级别,如DEBUG、INFO、WARN和ERROR,可以获取到运行时的详细信息。使用log4j、SLF4J等日志框架可以更方便地管理和控制日志输出。 4. **异常处理...
- **日志记录**:利用日志记录辅助调试,记录关键步骤和变量状态,便于事后分析。 这份文档很可能详细介绍了这些概念,并可能包含实践示例和最佳实践,帮助开发者提升在VC++环境中的调试效率和异常处理能力。对于...
### 软件工程中的故障排除与调试技巧 #### 第一章:简介 在软件工程领域,故障排除和调试是确保软件稳定性和可靠性的核心环节。随着软件复杂度的不断提高,这一过程变得越来越重要。本章节将从概念出发,探讨故障...
**BINDERFAILEDTRANSACTIONLOG**与**BINDERTRANSACTIONLOG**:通过读取`/proc/binder/failed_transaction_log`和`/proc/binder/transaction_log`文件,记录了Binder框架中的事务信息,Binder是Android系统中进程间...
5. **调试技巧:** - 使用断点和单步执行来观察代码运行过程。 - 输出日志信息,帮助定位问题。 - 使用调试器,如Visual Studio Debugger、GDB等。 - 代码审查,通过他人的眼睛发现潜在问题。 6. **预防Bug的...
本文将分享一些实用的VC调试技巧,帮助你快速掌握如何调试自己的程序,识别并解决bug。 1. **调试内存破坏** 内存破坏是导致程序不定时、不定地方崩溃的常见原因。当堆(heap)被破坏后,程序行为变得不可预测。...
对于服务器端,日志记录和分析是不可或缺的手段,通过分析错误日志可以发现程序异常的线索。 调试策略包括:回溯法,即从错误结果出发,逆向追踪到可能出错的代码行;分治法,将复杂问题拆分成小部分分别调试;以及...
本文将从几个方面介绍高效排除Bug的方法与经验。 #### 代码审查(Code Review) **代码审查**是一种非常有效的预防和发现Bug的方式。通过对代码进行同行评审,可以在代码合并到主分支之前发现潜在的问题。这不仅有...