第十章:代码阅读工具
1.心态与环境
- 可以试着向别人介绍您在阅读的代码,这样做一般会增进您对代码的理解。
- 理解复杂的算法或巧妙的数据结构,要选择一个安静的环境,然后聚精会神地考虑,不要借助于任何算机化或自动化的帮助。
2.代码阅读工具的运用
- 使用源代码浏览器浏览大型的代码集合以及对象类型。
- 通过分析相应目标文件中的符号,可以清晰地源文件的输入和输出。
- 要抵制信按照您的编码规范对外部代码进行美化的诱惑;不必要的编排更改会创建不同的代码,并妨碍维护工作的组织。
- 优美打印程序和编辑器语法着色可以使得程序的源代码更为易读。
- 将您觉得难以理解的代码打印到纸上。
- cdecl程序可以将难以理解的C和C++类型声明转换成纯英语(反之亦然)。
- 实际运行程序,往往可以更深刻地理解程序的动作。
- 系统调用、事件和数据包跟踪程序可以增进对程序运作的理解。
- 执行剖析器可以找出需要着重优化的代码,验证输入数据的覆盖性,以及分析算法的运作。
- 通过检查从未执行的代码行,可以找出测试覆盖的弱点,并据此修正测试数据
- 使用C预处理器理清那些滥用预处理器特性的程序。
- 词汇工具可以高效地在一个代码文件中或者跨多个文件查找某种模式。
- 以只读方式浏览源代码文件
3.正则表达式
- 使用正则表达式 ^function name可以找出函数的定义。
- 使用正则表达式的字符类,可以查找名称遵循特定模式的变量。
- 使用正则表达式的否定字符类,可以避免非积极匹配。
- 使用正则表达式symbol-1.*symbol-2,可以查找出现在同一行的符号。
4.编辑器
- 使用程序编辑器和与此同时表达式命令,浏览庞大的源代码文件。
- 可能用特定的tag创建工具,增加编辑器的浏览功能。
- 使用编辑器的大纲视图,可以获得源代码结构的鸟瞰图。
- 使用您的编辑器来检测源代码中圆括号、方括号和花括号的匹配。
5. 编译器
- 使用编译器的tags功能,可以快速地找出实体的定义。
- 要使编译器成为您的朋友;指定恰当级别的编译器警告,并小心地评估生成的结果。
- 要彻底地了解编译器如何处理特定的代码块,需要查看生成的符号(汇编)代码。
6. grep
- 使用grep定位符号的声明、定义和应用。
- 当您不能精确地要查找的内容时,请使用关键单词的词干对程序的源代码进行查找。
- 用grep过滤其他工具生成的输出,分离出您要查找的项。
- 将grep的输出输送到其他工具,使复杂处理任务自动化。
- 通过对grep的输出进行流编辑,重用代码查找的结果。
- 通过选取与噪音模式不匹配的输出行(grep -v),过滤虚假的grep输出。
- 使用fgrep在源代码中查找字符串列表。
- 查找注释,或标识符大小写不敏感的语言编写的代码时,要使用大小写不敏感的模式匹配(grep -i)。
- 使用grep -n命令行开关,可以创建与给定正则表达式匹配的文件和等号的检查表。
- 可以使用diff比较文件或程序不同版本之间的差别。
- 在运行diff命令时,可以使用diff -b,使文件比较算法忽略结尾的空格,用-w忽略所有空白区域的差异,用-i使文件比较对大小写不敏感。
7.构建自己的代码阅读工具
- 不要对创建自己的代码阅读工具心存畏惧。
- 在构建自己的代码阅读工具时:要充分利用现代原型语言所提供的能力;从简单开始,根据需要逐渐改进;使用利用代码词汇结构的各种试探法;要允许 一些输出噪音或寂静(无关输出或缺失输出);使用其他工具对输入进行预处理,或者对输出进行后期处理。
参考:
https://blog.csdn.net/weixin_30778805/article/details/95941141