目录[隐藏] |
静态查找 方法 - 无 需运行代码来查找
问人
这个是最简单快捷的方法了,大家一定要用好,找到合适的渠道在合适的 时间做合适的沟通 -- 这个可是关乎沟通能力的哦。不过也别忘了这种方法的缺陷。首先,你要找到合适的人;其次,那个人要有时间来回答你的问题;再次,那个人要记得你所问的问题大致在什么位置。最后,你也丧失了一次锻炼代码阅读能力的机会。所以,这种方法最好是在必要的时候 采用,呵呵!
通过Eclipse的引用功能查找
如果已经知道或者被告知相关的类,要找到有哪些其他的代码使用了这个 类,那么最直接的就是在这个类上点右键,然后点击 Open Call Hierarchy或者Refereces -> Workspace,让Eclipse自动找出使用它的代码。对方 法也可以用同样的操作。与引用查找类似的还有继承关系的查找,就是通过点Open Type Hierarchy来找出这个类的子类。
通过全文 搜索类名/文件名 来查找
有的时候,一个类并不是直接被其他类使用的,而可能是在配置文件中配 置的。这个时候,就只能通过全文搜索来查找了。根据已知的类目来全文搜索,就可以找到引用了这个类的配置文件 - 如Spring的bean配置文件,或者service的配置文件,或者其他自定义 的配置文件等等。
找到了配置文件,但是如果你不知道配置文件究竟是怎么发生作用的(特 别对于一些自定义的配置文件),又该怎么办呢?这个时候,你可以继续全文搜索来查找:
你可以搜 索这个配置文件的解析代码 - 例如,如果配置文件中 有一个比较特别的element叫做xyz,那么你就可以搜索xyz,因为解析代码里面一般应该会根据xyz去读取这个element
你也可以 根据这个配置文件的文件名去搜索 - 既然系统能够解析这个 配置文件,那么它一定要先找到这个文件。无论这个文件名是hardcode在代码里面,还是配置在另外一个配置文件里面,聪明的你一定可以顺藤摸瓜,找到相关的代码的,是吗?
现在虽然已经找到解析配置文件的代码了,但是还是没看出来究竟是怎么回事,又该怎么办呢?别急,通常配置文件解析后会变成一个bean,这个bean里面的配置信息一定会有其他的类去引用它的,顺着这种引用关系,你一定可以找到要点的。
通过全文 搜索界面特征串来查找
你看到了一个页面,怎么找到这个页面的实现逻辑究竟在哪里呢?一般可 以这样来查找:
首先找页 面模板。看看这个页面上有没有比较特别的字符串 - 这个字符串可以是用户 可以看见的文本,也可以是form里面某个字段的name,总之越是特别就越好。然后用这个字符串来全文搜索,自然可以比较精确地找到对应的模板的。
找到页面 模板后,接下来你可以要找是哪些代码生成的这个页面显示的数据,或者要找是哪些代码处理了这个页面提交的数据。这个过程稍微有点复杂,还需要对WebX的映射规则有相当的了解...... ...... 唉,具体的这里就不赘述了, 欢迎高手顶贴完善!
动态查找 方法 - 通 过运行代码来查找
调试
这种是最常用的方法了,有IDE的帮助,直观方便。但是也别忘了,调 试虽然方便,却是极其的低效哦!高手通常在调试上花费的时间是很少的,除非是特别复杂的逻辑或者是比较诡异的问题。还有,调试的方法一般只适合来查找自己有些熟悉的代码,否则就会像掉进了原始森林,很快就会晕头转向!所以,调试的应用范围有限,这里就不赘述了。
看Log
这种方法也非常有效,因为Log会如实地反映执行过程中所发生的一 切,特别当Log打 的比较好的时候,能够很清晰地说明问题。而且Log能够为你提供静态查找的入口,因为你可以通过查找Log中的关键字快速找到究竟是哪个类打出 来的!当然,Log也 有自己的缺点,那就是Log有时候太多,而且很多Log可能看不懂(多数程序员打的Log怕是都只需要也只有自己能看懂吧~~)
打Stack Dump
如果你已经通过某种方法找到一个比较核心的业务类了,那么恭喜你已经 深入腹地了。但是,你可能对于这个类究竟是怎样被调用的、处于一个什么执行流程中还一头雾水。这个时候,你可以修改代码,在合适的地方加入一条 Thread.dumpStack(), 把调用链打出来。用这种方法,你可以轻易地抓出一系列重要的更加底层的类,然后顺藤摸瓜,把整个流程全部打通!
边查边记录
有时候代码和逻辑可能非常复杂,很多个类绕来绕去的,让人眼花缭乱,很快就发晕了。这个时候,你需要一个强大的记忆系统来帮助你整理思路、记录历史。最好的方法是用图来记录,UML就是一种。当然你也可以用自己独创的方法,不过缺点就是只有你自己能看懂。