自动分析源代码,创建函数地图展示调用关系 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
cppgeek

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

  •  
  •   cppgeek Sep 18, 2015 6008 views
    This topic created in 3874 days ago, the information mentioned may be changed or developed.

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

    Function Map

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

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

    Track Modification

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

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

    Travelling Mode1

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

    Travelling Mde2

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

    Travelling Mode3

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

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

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

    一直好想有这类的工具
    WalkingEraser
        5
    WalkingEraser  
       Sep 18, 2015
    有机会的话,也想完成个像样功能的 parser
    ZHenJ
        6
    ZHenJ  
       Sep 18, 2015
    不错,看是公司的版权,国内做工具类软件的公司吗? UI 就不吐槽了,估计是人手不足?函数地图能够分离出来的话,多屏显示会很棒
    cppgeek
        7
    cppgeek  
    OP
       Sep 18, 2015
    @GPU @missdeer @simpx @cxl008
    UI 都是贴图,这是 2012 年设计的UI , 2015 版界面正在开发中,计划 1.1.5 版会更新掉
    目前只有 Windows 平台, linux/mac 用户请在虚拟机内使用,因为软件可以在 Win2000+512M 的环境下运行,虚拟机跑起来也很流畅
    scys
        8
    scys  
       Sep 18, 2015
    其实我想问,测试过多大的数量级的代码?
    如果好用,试试跑 AOSP 等级
    mocxe2v
        9
    mocxe2v  
       Sep 18, 2015
    用过 Understand ,不知这个和它的区别在什么地方?
    21grams
        10
    21grams  
       Sep 18, 2015
    能代替 sourceinsight 吗?
    libo26
        11
    libo26  
       Sep 18, 2015
    期待 UI 更新
    cppgeek
        12
    cppgeek  
    OP
       Sep 18, 2015
    @WalkingEraser @ZHenJ @libo26
    谢谢理解和支持,是公司版权
    cppgeek
        13
    cppgeek  
    OP
       Sep 18, 2015
    @scys @mocxe2v @21grams
    并不能保证无论多大多复杂的代码都能建图分析,我们一直在尽量优化算法
    没想过替代谁,各有各的应用场景和实现目标
    RangerWolf
        14
    RangerWolf  
       Sep 18, 2015
    可以直接 js 代码的处理吗?
    clijiac
        15
    clijiac  
       Sep 18, 2015
    UI 略古老 但是看起来不错
    sorra
        16
    sorra  
       Sep 18, 2015
    你们这个能识别函数重载吗?
    cppgeek
        17
    cppgeek  
    OP
       Sep 18, 2015
    @RangerWolf @clijiac @sorra
    谢谢支持, js 代码的分析正在实现中,函数重载可以在函数地图中用不同的节点体现,但是在旅行模式下无法区分同名不同参数的函数,正在优化
    momo1999
        18
    momo1999  
       Sep 18, 2015
    吃我 IDA 一记
    gaocegege
        19
    gaocegege  
       Sep 21, 2015
    https://github.com/colder/insane
    看上去只是一个 controll flow graph generator?
    cppgeek
        20
    cppgeek  
    OP
       Sep 22, 2015
    @gaocegege 我们的软件有自己的特色,另外随着新版本发布,会有更多的新特点,目前才 1.1.4 版,对于一个软件来说,还很年轻,请保持关注
    About     Help     Advertise     Blog     API     FAQ     Solana     3278 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    UTC 13:28 PVG 21:28 LAX 06:28 JFK 09:28
    Do have faith in what you're doing.
    ubao msn 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