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