Android-如何快速的定位程序中某个功能对应的代码?

Android-如何快速的定位程序中某个功能对应的代码?

偏爱自由 发布于 2017-07-21 字数 1070 浏览 1299 回复 8

我们经常会接手别人开发完的一些代码,而且通常有这样一些任务要做:
1.解决某个模块的指定bug。
2.增加或者修改某个模块的feature。
3.添加新的功能模块。

因此我们经常需要找到一个功能模块的相应源文件,甚至一个源文件的某个函数,更甚至于函数中的某一行,某个变量,某个参数。针对有界面的情况,还需要考虑gui配置的xml文件,还有全局的配置文件。等等。。。。
在没有文档和其他熟悉这个程序的人指导的情况下,如何快速的定位呢?当然前提是,对于至少有点经验的程序员来讲。

比如,在修改某个界面的情况下,我需要修改一个文本的字体和大小,
那么快速的方法是:
1.找到字符串所在的文件,grep -anr 'stringtoFind' *
2.通过上一步获取的字符串引用名称再去查找哪些控件引用了这个字符串, grep -anr ' #stringname #' *
3.找到控件所在地,然后修改控件属性。

再比如,如果涉及到源码的情况:
1.通过源文件的名字猜测,得到大致的定位
2.分析大致函数调用关系
3.通过排除法,比如,注释某个函数代码

实际项目中,大家都用什么方式来快速定位,能分享下经验吗??只以靠静态分析代码,我觉得可能是效率比较低的方法,因此有更高效的方法吗??

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

虐人心 2017-10-25 8 楼

针对带界面的模块:
1.基于字符串或图片的工具查找定位法:
在界面上面无非就是字符串和图片,在待查模块的界面锚定一个字符串比如"music list",这个字符串必然被待查模块引用,于是查找所有引用的地方,方法
a.如果是ide开发环境,里面直接查找字符串"music list"。
b.linux命令行,在项目目录下grep -anr 'music list' *
使用这种方法之后,将待选范围可以缩到非常小了。几乎是函数级别了。
图片的查找更方便,人眼比较就能找到对应图片,取出图片名继续上面的a,b操作。

2.有些特定的功能需要运行才能获取精确定位,使用注释法。通过注释某个函数,或者某几句可选代码。可以很快查处对应功能所在。

总结:静态分析可以从整体上把握一个程序代码,可能是必要的,但是实际项目的工作复杂性太大了,不确定性更多,你接手的代码不太可能会像经典开源项目那样善心悦目,很多时候是充斥了大量的错误和冗余的代码,极端的时候你可能看了半天代码,实际一调试发现,之前认为完成某个功能的那段代码根本没有被调用,浪费时间啊!!!杯具!!因此,快速查找法和注释法能帮你事半功倍。

晚风撩人 2017-10-05 7 楼

1 首先这个程序能跑起来,知道是干什么的,有哪些功能?体验用用。一般会知道有哪些模块,有哪几部分组成。
2 寻求一份完成的项目设计方案,看看。
3 有log的看log。
4 利用sourceinsight搜素关键字进行查询
5 一点点看代码吧。
6 找到以前的开发人员:“大哥我给你100¥,你告诉我吧”

虐人心 2017-09-19 6 楼

我觉得看别人代码应该先要找到入口函数..一步一步去读懂他的思路..然后找到主要模块后可以用namespace命名一下..方便自己记忆...如果做移植项目则需要把所有逻辑剔出来..善用断点功能就可以很容易读懂别人的代码..先把BUG剔出跑起来是关键~

偏爱自由 2017-09-08 5 楼

个人感觉解bug时快速定位一定要基于一份完整的log,从log中最起码能定位到出问题的类,然后结合代码寻找感兴趣的字段。如果懒的动脑子的话,加log吧。在敏感的地方加上log,然后mm一个包出来,push到手机上,跑起来继续抓log,运气好的话几分钟就找到。接下来就要动脑子去分析问题的原因了。当然,有时候也会遇到5、6手的乱码,碰到这样的就认命吧,只能老老实实从头看代码。

偏爱自由 2017-09-02 4 楼

提供一种针对mvc架构的php网站的查找思路:

如果是维护一套代码,最好事先抽时间看一看它的逻辑架构。
有两个地方最好事先搞清楚:
1.代码的消息分发系统。
2.代码的数据库接口、vendors、与外界通信的第三方接口。
一般功能模块就是实现从1到2的过程,介于这两者之间,

从浏览器(也就是你说的界面)上找到要向消息分发器传入的参数,最笨的方法就是从消息分发器走起,一步步往下查。但是这么正规的走往往无疾而终,即使成功也花很多时间。

所以奇正相生很必要,一般代码里的函数处理是非常蛋疼的几层十几层的层层递进,但是处理某个功能的上下层函数词缀是有相似的(起个名字,叫特征词缀),直接搜索特征词缀就可以了。

有注释直接搜索注释。

偏爱自由 2017-09-01 3 楼

这个确实有点棘手,当接手别人的项目时维护起来真得是不容易,特别是出现了错误定位Bug更是头疼,说说我自己平常是怎么做的吧。首先一定要让程序先运行起来,然后先根据程序运行的模块,先慢慢摸清程序各业务模块对应的代码模块。这样分开以后就会对整个程序架构有所了解,哪些是业务模块,哪些是程序核心类库及各类库的所对应的功能。经过对业务逻辑和程序逻辑的了解,这样当程序出现Bug的时候至少能大致定位到出错的地方,缩小了范围,接下来可以借助开发软件对代码进行跟踪,断点。最后确定Bug所在。

归属感 2017-08-08 2 楼

分清代码的结构 是mvc 还是ssh 还是其他什么结构的 还有包的情况要搞清楚 这样有助以后需找相应的类 之后从主类中开始拆功能 一个个功能的看 一定要写注解 这表示这段你看懂了 而且有助你以后回头看代码的时候节省很多的时间 有一些IDE是可以显示函数被哪个类调用的 比如eclise, ctrl+alt+h 的快捷方式就能看到调用函数的方法,看人家的代码就是要进入到人家的逻辑思维 不要让你自己的思维作为主导地位 不然这会影响你的情绪和思维方式 虽然按照你的思维逻辑想出来的设计可能比原本的好 可是我们的任务不是开发 我们是在做维护和二次的开发 必须要与原本的设计相结合 不是让软件变成一个四不像

清晨说ぺ晚安 2017-07-31 1 楼

1.如果是查找bug,觉得主要跟程序员的经验有关,如果程序员本身的经验丰富,查找bug起来会有自已的一套思路,还有碰到bug一定要使自已静下心来处理。才会事半功倍。

2.对于编辑过的页面,代码,脚本想要快速找到它。可以借住一个任务工具,如:eclipse的插件mylyn。该工具可以记住你对某个自定义的任务的任务编辑动作。