自动分析源代码,创建函数地图展示调用关系

2015-09-18 08:59:20 +08:00
 cppgeek
极客讨论器现在可以自动分析 C/C++/Java/C#/Python/Objective-C 语言源代码并生成表示调用关系的函数地图,并使用“旅游”模式,在函数地图中浏览代码。如图:
![Function Map]( http://fcshare.net/snapshots/v1.1/cn/functionmap.png )
源代码窗口下方就是函数地图。它和源代码是联动的,双击一个函数节点,就自动打开这个函数的代码,编辑或者浏览源代码时则会在地图上自动定位这个函数节点。


每个函数节点上还有表示修改状态的图标,不管是在内部编辑器还是外部编辑器中修改了这个函数的代码,地图上会立即反映出来。如图:
![Track Modification]( http://fcshare.net/snapshots/v1.1/cn/trackmodification.png )
在 UltraEdit 中修改了 Board::operator[]函数,地图上这个函数修改状态图标是红色,表示“有修改”。


建立起函数地图后,我们就可以用“旅游”模式在地图中浏览源代码了。如图:
![Travelling Mode1]( http://fcshare.net/snapshots/v1.1/cn/travellingmode1.png )
双击 main 函数打开 main 的代码后,它调用的 Game::startGame 函数背景为黑色(和消息回忆模式一样)。此时选中 startGame ,地图上方的“前往”按钮就可以使用了:
![Travelling Mode2]( http://fcshare.net/snapshots/v1.1/cn/travellingmode2.png )
点击一下“前往”按钮,直接打开 Game::startGame 的源代码,并将调用栈记录在消息板上,调用方是 main ,被调用方是 Game::startGame ,都是超链接,随时可以通过这些超链回到调用函数 main ,或者调用位置(也就是点击“前往”按钮以前所在的位置):
![Travelling Mode3]( http://fcshare.net/snapshots/v1.1/cn/travellingmode3.png )
在[这里]( http://fcshare.net/gtalkabout_p_cn.html )有动画展示,和下载地址,欢迎使用。
5265 次点击
所在节点    分享创造
20 条回复
cxl008
2015-09-18 09:05:45 +08:00
看起来不错
simpx
2015-09-18 09:20:02 +08:00
很有意思的项目,不过现在只有 windows 平台吗?
missdeer
2015-09-18 09:45:52 +08:00
这 UI 有点差啊
GPU
2015-09-18 09:54:22 +08:00
如果 UI 现代一点 ,就很棒很棒了 。

话说如果有这个 ,看别人的代码就不用这么麻烦,要用全文搜索工具咯 。

一直好想有这类的工具
WalkingEraser
2015-09-18 10:15:16 +08:00
有机会的话,也想完成个像样功能的 parser
ZHenJ
2015-09-18 10:23:01 +08:00
不错,看是公司的版权,国内做工具类软件的公司吗? UI 就不吐槽了,估计是人手不足?函数地图能够分离出来的话,多屏显示会很棒
cppgeek
2015-09-18 10:23:57 +08:00
@GPU @missdeer @simpx @cxl008
UI 都是贴图,这是 2012 年设计的 UI , 2015 版界面正在开发中,计划 1.1.5 版会更新掉
目前只有 Windows 平台, linux/mac 用户请在虚拟机内使用,因为软件可以在 Win2000+512M 的环境下运行,虚拟机跑起来也很流畅
scys
2015-09-18 10:39:44 +08:00
其实我想问,测试过多大的数量级的代码?
如果好用,试试跑 AOSP 等级
mocxe2v
2015-09-18 10:40:10 +08:00
用过 Understand ,不知这个和它的区别在什么地方?
21grams
2015-09-18 11:49:19 +08:00
能代替 sourceinsight 吗?
libo26
2015-09-18 13:25:52 +08:00
期待 UI 更新
cppgeek
2015-09-18 13:51:12 +08:00
@WalkingEraser @ZHenJ @libo26
谢谢理解和支持,是公司版权
cppgeek
2015-09-18 13:57:07 +08:00
@scys @mocxe2v @21grams
并不能保证无论多大多复杂的代码都能建图分析,我们一直在尽量优化算法
没想过替代谁,各有各的应用场景和实现目标
RangerWolf
2015-09-18 15:01:20 +08:00
可以直接 js 代码的处理吗?
clijiac
2015-09-18 15:33:22 +08:00
UI 略古老 但是看起来不错
sorra
2015-09-18 15:37:29 +08:00
你们这个能识别函数重载吗?
cppgeek
2015-09-18 16:00:11 +08:00
@RangerWolf @clijiac @sorra
谢谢支持, js 代码的分析正在实现中,函数重载可以在函数地图中用不同的节点体现,但是在旅行模式下无法区分同名不同参数的函数,正在优化
shuax
2015-09-18 21:55:16 +08:00
吃我 IDA 一记
gaocegege
2015-09-21 19:40:57 +08:00
https://github.com/colder/insane
看上去只是一个 controll flow graph generator?
cppgeek
2015-09-22 09:19:29 +08:00
@gaocegege 我们的软件有自己的特色,另外随着新版本发布,会有更多的新特点,目前才 1.1.4 版,对于一个软件来说,还很年轻,请保持关注

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX