爱意满满的作品展示区。
cppgeek

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

  •  
  •   cppgeek · Sep 18, 2015 · 6638 views
    This topic created in 4065 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 Mode2

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

    Travelling Mode3

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

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

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

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