V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cppgeek
V2EX  ›  分享创造

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

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

    极客讨论器现在可以自动分析 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   ·   实用小工具   ·   3100 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:06 · PVG 21:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.