代码调试的技巧
Leading
在编写代码过程中, 调试代码是一件非常重要的事情。 尤其是对于新接触一门语言时, 掌握必要的调试技巧对于掌握这门语言很有帮助。 以下将总结一些常用的代码调试技巧。
Avoiding
如何必免一些不必要的代码错误? 这需要规范化 的编程。 任何一门语言都有一定的编程规范。 比如Python 的PEP8 标准。
这些规范主要解决了几件事情:
- 变量函数类的命名问题, 是下划线的方式还是驼峰式。列如: 在java中规定类名首字母要大写, 采用驼峰式, 函数名首字母要小写。 在go中规定public的函数首字母要大写
- 括号, 空格的位置以及必要与否。 比如一般规定
=
左右要控两格, 如a = b
这样是规范的a=b
则是不规范的。 列如规定要用4个还是2个空格来代替tab
, 列如规定{
在同一行还是单独一行 - 一定的设计模式, 如面向对象的方法
MVC
的模式, 等等。 - 注释的方式
遵循一定的设计模式,可以让你的代码更可读,也容易必免一些不必要的问题。 这里推荐一本书<<重构:改善改善既有代码的设计>> 阅读前面两三章就会觉得受益无穷
另外还需要一个强大的功能完善的开发环境。 尤其是代码提示, 拼写提示, auto format 等等。
出错了后的调试
总结几种经常用到的调试方法。
- 最重要的一点,根据你的直觉,当程序出错时,直觉会告诉你错误在哪里, 根据你的直觉能最快的定位问题
- 输出一些必要的调试信息, 如变量的值, 程序是否调用到你的方法或函数
- 反正法, 在代码里嵌入一个明显错误的代码,让程序抛出异常,如 验证文件是否被读取到,可以把文件名换成一个明显不存在的名字。 再如,验证某个方法是否被调用到,可以写一个明显错误的语句如 1/0. 这在动态语言缺少必要调试工具的情况下十分行之有效。如调试php代码, 我会在一个方法下调用一个明显不存在的function,看是否有异常。
- 使用调试工具。感觉调试工具对于调试一个小程序很有效果。 然而它的功能也很有限,而且效率也不高。 如果使用调试工具我们要做到,合更的设置断点, 合理的去写监控表达式。
- 对于拼写错误。根据个人的经验。 80%的程序错误都是由于拼写产生的。尤其是在写动态语言的时候。 应对方式: 你的开发环境能够自动的提示你变量的拼写,等等,最好当选中一个变量名的时候, 上下文中相同的变量名都会被提示出来这是最理想的。 当程序出错时,可以逐一检查变量名,采用复制粘贴的方法以确保拼写一致, 有时候缺一个字母根本看不出来。(当然静态语言在这一点上有天然的优势。编译过程中编译器已经帮你指出了大部分拼写错误)
- 使用diff工具。当你需要知道两个看着一模一样的文件或文本是否有不同, 有哪些不同的时候,
diff
会帮你很好的解决这个问题,diff
是一个linux命令,具体使用man diff
查看 - 当你实在没有办法, 不知道程序哪出错了, 删掉现在的代码重写一遍吧,也许就是由一个你实在看不出的拼写造成的。写第二遍的时候也许自然就好了, 我遇到过很多次这种情况