自动分析源代码,创建函数地图展示调用关系 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cppgeek
V2EX    分享创造

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

  •  
  •   cppgeek 2015-09-1808:59:20 +08:00 5702 次点击
    这是一个创建于 3677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    极客讨论器现在可以自动分析 C/C++/Java/C#/Python/Objective-C 语言源代码并生成表示调用关系的函数地图,并使用“旅游”模式,在函数地图中浏览代码。如图:

    Function Map

    源代码窗口下方就是函数地图。它和源代码是联动的,双击一个函数节点,就自动打开这个函数的代码,编辑或者浏览源代码时则会在地图上自动定位这个函数节点。

    每个函数节点上还有表示修改状态的图标,不管是在内部编辑器还是外部编辑器中修改了这个函数的代码,地图上会立即反映出来。如图:

    Track Modification

    在 UltraEdit 中修改了 Board::operator[]函数,地图上这个函数修改状态图标是红色,表示“有修改”。

    建立起函数地图后,我们就可以用“旅游”模式在地图中浏览源代码了。如图:

    Travelling Mode1

    双击 main 函数打开 main 的代码后,它调用的 Game::startGame 函数背景为黑色(和消息回忆模式一样)。此时选中 startGame ,地图上方的“前往”按钮就可以使用了:

    Travelling Mode2

    点击一下“前往”按钮,直接打开 Game::startGame 的源代码,并将调用栈记录在消息板上,调用方是 main ,被调用方是 Game::startGame ,都是超链接,随时可以通过这些超链回到调用函数 main ,或者调用位置(也就是点击“前往”按钮以前所在的位置):

    Travelling Mode3

    这里有动画展示,和下载地址,欢迎使用。

    20 条回复    2015-09-22 09:19:29 +08:00
    cxl008
        1
    cxl008  
       2015-09-18 09:05:45 +08:00
    看起来不错
    simpx
        2
    simpx  
       2015-09-18 09:20:02 +08:00
    很有意思的项目,不过现在只有 windows 平台吗?
    missdeer
        3
    missdeer  
       2015-09-18 09:45:52 +08:00
    这 UI 有点差啊
    GPU
        4
    GPU  
       2015-09-18 09:54:22 +08:00
    如果 UI 现代一点 ,就很棒很棒了 。

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

    一直好想有这类的工具
    WalkingEraser
        5
    WalkingEraser  
       2015-09-18 10:15:16 +08:00
    有机会的话,也想完成个像样功能的 parser
    ZHenJ
        6
    ZHenJ  
       2015-09-18 10:23:01 +08:00
    不错,看是公司的版权,国内做工具类软件的公司吗? UI 就不吐槽了,估计是人手不足?函数地图能够分离出来的话,多屏显示会很棒
    cppgeek
        7
    cppgeek  
    OP
       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
        8
    scys  
       2015-09-18 10:39:44 +08:00
    其实我想问,测试过多大的数量级的代码?
    如果好用,试试跑 AOSP 等级
    mocxe2v
        9
    mocxe2v  
       2015-09-18 10:40:10 +08:00
    用过 Understand ,不知这个和它的区别在什么地方?
    21grams
        10
    21grams  
       2015-09-18 11:49:19 +08:00
    能代替 sourceinsight 吗?
    libo26
        11
    libo26  
       2015-09-18 13:25:52 +08:00
    期待 UI 更新
    cppgeek
        12
    cppgeek  
    OP
       2015-09-18 13:51:12 +08:00
    @WalkingEraser @ZHenJ @libo26
    谢谢理解和支持,是公司版权
    cppgeek
        13
    cppgeek  
    OP
       2015-09-18 13:57:07 +08:00
    @scys @mocxe2v @21grams
    并不能保证无论多大多复杂的代码都能建图分析,我们一直在尽量优化算法
    没想过替代谁,各有各的应用场景和实现目标
    RangerWolf
        14
    RangerWolf  
       2015-09-18 15:01:20 +08:00
    可以直接 js 代码的处理吗?
    clijiac
        15
    clijiac  
       2015-09-18 15:33:22 +08:00
    UI 略古老 但是看起来不错
    sorra
        16
    sorra  
       2015-09-18 15:37:29 +08:00
    你们这个能识别函数重载吗?
    cppgeek
        17
    cppgeek  
    OP
       2015-09-18 16:00:11 +08:00
    @RangerWolf @clijiac @sorra
    谢谢支持, js 代码的分析正在实现中,函数重载可以在函数地图中用不同的节点体现,但是在旅行模式下无法区分同名不同参数的函数,正在优化
    shuax
        18
    shuax  
       2015-09-18 21:55:16 +08:00
    吃我 IDA 一记
    gaocegege
        19
    gaocegege  
       2015-09-21 19:40:57 +08:00
    https://github.com/colder/insane
    看上去只是一个 controll flow graph generator?
    cppgeek
        20
    cppgeek  
    OP
       2015-09-22 09:19:29 +08:00
    @gaocegege 我们的软件有自己的特色,另外随着新版本发布,会有更多的新特点,目前才 1.1.4 版,对于一个软件来说,还很年轻,请保持关注
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1340 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:47 PVG 00:47 LAX 09:47 JFK 12:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86