相信看这篇文章的人,都应该知道调试器是什么。在此就不做解释了。稍微想想就知道,没有debugger,我们肯定是能编程的。Debugger也是一个程序,要是没有它,就不能写程序了,也就不存在Debugger了。今天把这个问题提出来讨论,是因为现在的有些小朋友,已经把Debugger神话了,觉得没有调试器的语言就不是好语言,没有调试器就不能编程了。调试器自有它的用处,但是还没有重要到那种程度。下面就按照以下几点来阐述我对调试器的认识:
- 调试器的作用
- 调试器不是万能的
- 没有调试反而会有哪些好处
调试器的作用
我想它最大的用处,也是其初衷,应该是可以帮助我们定位Bug,从名字也能知道这点。对于初学者而言,还可以通过一步一步的调试来理解程序运行。相信让我们感觉最恐惧的就是“改不完的bug”。有了Debugger,貌似可以让我们好受一些,要是没有它就会感觉寸步难行,连自信心都会打折。相信没有人会对调试器的作用产生怀疑。但我并不认为它是无所不能的。
调试器不是万能的
- 如果是在生产环境出现异常,相信没有多少人有机会能现场调试,就算能调试,敢不敢现场调试也是一个问题。而且基于源码的调试,某些语言或系统平台是需要debug版本的,而生产环境用的版本,一般不太可能是这种debug版本。但出问题了,还得解决。
- 调试器也不能解决一些多线程的问题。有些bug是多个线程并行运行的时候才出现的,如果用调试器,暂停调试的当前线程后,bug就不出现了。以此类推,Bug有很多种,并不是所有Bug都能通过调试器来定位。
- 不是所有平台,所有语言的调试器都是一样,有些做得比较强大,有些则要稍微次一些。这也就意味着有些调试器并不能解决其他的调试器拥有的功能。
没有调试反而会有哪些好处
- 过度依赖调试器,会让你思维懒惰,总想着出问题的时候调试来解决。其实很多问题,自己稍微动动脑子,就可以避免的。在没有调试器的情况下,会让你更加积极的思考和审视当前的编写的代码,更不容易出错。
- 没有调试器,你就会想其他的办法来验证程序的正确性,从而你可能会考虑一些以前你自己完全没想过的办法来定位bug。不管是静态检查还是运行时分析。而这些方法,可能会在生产环境也有用。这是非常有价值的。比如完善的日志收集和分析系统。
- 没有调试器,你会成长地更快,效率更高。有些人用调试器定位问题,真是那个慢啊,一步一步地调试,真比蜗牛还慢。而Bug又一大堆,必然效率低下。没有调试器的情况下,或许你会更加小心的编写代码,对使用的各种语言特性,用法更加的关注,从而提高代码质量。可能一开始就有单元测试覆盖,一步一步走得比较稳。这些都会大量降低低级Bug的数量,从而提高效率。
- 没有调试器,你可能会真正成为代码一次编写后,没有任何Bug的高手。
如果你还没有尝试过在没有调试器的情况下编程,你可以尝试一下不用调试器完成一个项目,或者干脆使用没有调试器的语言做一个项目,比如Golang。期待你的反馈和宝贵意见。