`
steeven
  • 浏览: 313904 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

介绍一个好东西:RELO, 代码分析用的

阅读更多
介绍一个好东西:RELO, 代码分析用的

先说几个题外话:
1. 饭碗掉到马桶里面还要不要用了?重要的马桶里面还有新鲜的shit。偶是做软件的,选择了重用。。

。开水冲洗一下,然后进微波炉转转。经济危机,勤俭节约。
2. 我们都有这样的经验:拿到一堆开源的代码,在里面看呀看呀找不到方向,看到这里忘了那里。或者

是维护别人的代码,在一堆垃圾代码中苦苦挣扎。
3. 有同事建议看些右脑开发的东西,他能随口说出我们的手机号码,汗!偶有心打鸣没心下蛋,下了一

堆资料没去看。但是有个重要的概念:人脑对图形的记忆能力远远强于对文字数字的记忆。所以最好的语

文老师要求背诵荷塘月色的时候都会极力YY一下。所以也有了UML,那玩意虽然很枯燥,总比看代码有印

象。
4. 最近忙得脚打后脑勺,这个题目两周前就想写,今天总算有点时间。


正题:
因为要解决一个比较棘手的问题,要看很多代码,一边看一遍用画图工具画下来,总觉得不方便。正好有

同事推荐了RELO, 结果用下来发现有很多问题,仔细看看,原来2年没维护了。自己改了些bug, 终于可以

凑合着用了。下面是用RELO分析RELO导出的图(这个导出功能是我加的,把关系线给导没了,待修):
Elipse编译插件结构:


对象模型:
GEF对象模型:


RELO比较可爱的几个地方:
1. 现有的类可以从左边的导航树上直接拖到图上
2. 成员是根据需要展开的
3. 同步功能,你看过的代码会自动记录到图上,很方便回过头追踪。特别是断点调试的时候,stack

trace可以变成调用过程图。
4. 方法的前后调用关系,可以从图上直接展开。

RELO对代码的关系分析有两种方式(图一):ASM和AST。前者从编译后的class解析(缺省),后者利用

Eclipse对源码树的解析。有兴趣的可以拿来好好学习一下。

如果我们自己实现这种插件,想想要建立多少个对象呢?

package/class/method/field/relation/memo/link/...
relo里面利用了openrdf,这个玩意很有趣,正好也很适合描述这些复杂关系, 下章blog单独介绍RDF吧,

这个问题有点大。

果然是MIT出品,在设计上很有新意。但是仔细看看代码,有些混乱,可能是不同的人维护出来的结果。

原作者vineet(好像是个印度人)现在就职另外一个公司,有商业版本relo推出,对个人免费。现在还没

看到产品。

我改过的代码在http://bitbucket.org/steeven/relo/上有克隆版本。这个网站很有趣,mercurial的

eclipse插件就在这个上面。如果你对某个项目想实现自己的开发分支,或者提交一些patch, 无需提交权

限,把原来的项目克隆成自己的,直接提交即可,如果有价值,可以要求主干维护者merge你的patch。别

人也能看到你的分支。这些有趣的特性来自mercurial(HG)一个类似于GIT的分布式版本管理工具。

netbeans已经正式支持。好处很多,自己慢慢研究吧。习惯windows下面玩的有对应的乌龟可用。

OK, 如果你也喜欢这个小插件,欢迎帮忙完善它,不管文档还是代码。
12
1
分享到:
评论
7 楼 tobeornottobe 2013-04-02  
很不错哦,说到代码分析,其实这个Dotfuscator感觉挺不错的,界面上也比较好操作·····
   哦,最近这个的开发商PreEmptive,在中国有个代码分析技术交流会,就在4月17号,主要是探讨如何安全高效的开发优秀软件这个主题,有兴趣的可以去了解一下~~~
6 楼 zhufanamo 2009-07-06  
老版的together 就有这个功能,java导进去。图型直接就出来

不过现在这个版本的together 不知道哪下了
5 楼 jiangsha 2009-04-22  
怎么不打包一个上传上来啊,
4 楼 steeven 2009-04-20  
如果有需要, 我可以把它提交到bitbucket上面
3 楼 steeven 2009-04-20  
我patch的版本需要自己弄下来build一下update-site项目. 然后添加为本地的安装site.
2 楼 langyu 2009-04-20  
试用起来很爽
的确好用,代码结构很清楚
可以在前期开发的时候把代码结构搭起来,让项目组的成员对架构有个认识。
1 楼 cantellow 2009-04-20  
怎么按这个插件都没说啊

相关推荐

    eclipse myeclipse 插件 relo 天涯浪子

    在使用Relo时,开发人员可以结合Eclipse或MyEclipse的强大编辑和调试功能,更有效地进行代码分析。例如,当在类图中找到感兴趣的类时,可以直接点击跳转到源代码,进行进一步的查看和修改。此外,插件可能还提供了...

    ReLo_BE:ReLo 应用程序的后端

    ReLo(后端) ReLo 是一款基于 VueJS 的微博和社交网络应用重要的! 这仅包括项目使用的 REST API。 要测试整个应用程序,请克隆 ,这是该项目使用的 FrontEnd 部分设置安装依赖: npm install运行服务器: 在 ...

    eclipse插件介绍

    11. **Relo**:Relo是一款代码分析工具,特别适用于大型项目。它可以帮助开发者跟踪代码包的层次结构,快速生成类似UML的类图,便于理解代码结构。 这些插件丰富了Eclipse的功能,使其成为一个高度可定制化的开发...

    project-relo

    "project-relo"看起来像是一个项目的名字,很可能是一个软件开发项目。从提供的信息来看,这个项目与JavaScript有关,因此我们可以推测这是一个使用JavaScript编程语言构建的项目。JavaScript是Web开发中最常用的...

    eclipse使用Architexa画UML类图

    Eclipse是一款广受欢迎的开源集成开发环境(IDE),它提供了丰富的功能来支持软件开发...结合源码分析和图表展示,Architexa成为了一个强大的工具,尤其对于维护大型项目和进行代码重构的团队来说,它的价值不言而喻。

    IO接口板计算机计算机

    #### Rel1-Rel4、Rel5-Rel6、Relo8-Relo9、Relo10-Relo11、Relo12-Relo13、Relo1-Relo2、Relo3-Relo4、Relo5-Relo6、Relo7-Relo8、Relo9-Relo10、Relo11-Relo12、Relo13-Relo14 这些表示继电器触点。电路板上的继电...

    commonmark-ext-yaml-front-matter-0.12.1.jar

    java运行依赖jar包

    Relo C/C++ Development Environment-开源

    Relo是用于MinGW和Borland C ++编译器的Windows C / C ++ IDE。 它主要针对开发Windows(Win32)应用程序,但也可以用于开发控制台/ DOS应用程序。 它的设计易于使用和自定义。

    Relo Estate Property-crx插件

    语言:English ReloTalent插件可让您将房地产网站中的房地产直接导入到您的环境中 在ReloTalent,我们知道快速找到并向客户提出建议对您来说很重要。 我们创建了ReloTalent房地产Chrome附加组件,使您可以直接从正在...

    mr-miyagi:Plotly Dash应用程序,用于具有可视化效果的相机流

    这是一个FastAPI应用程序,可在具有运动和对象检测的单独线程中运行连续循环。 检测到的事件存储在Sql-Lite数据库中。 此过程公开了一条video-feed路径,该路径可实时传输图像。 如何启动: uvicorn fastapi_app...

    思科交换机配置命令大全

    根据给定的信息,我们可以整理出思科交换机配置命令大全中的关键知识点,这些知识点主要涉及交换机的基础配置、用户管理、接口配置、IP地址配置、VLAN管理等几个方面。 ### 1. 用户模式与特权模式 - **简写命令**:...

    Electron-express-react-App:使用Express服务器和React的Electron应用程序的快速入门

    电子表达React应用程序 使用Express服务器和React的Electron应用程序的快速入门 ... Webpack建立在开发模式下(它将在您编辑app文件夹上的内容时建立时间)之后,您只需在devtools中键入location.relo

    从零开始的神经网络:从零开始构建的神经网络,不使用机器学习库。 解决了我定义的分类问题,但可以进行调整以更加灵活。 该网络对测试数据的准确度达到了85%

    它创建了一个由数据点组成的随机3臂螺旋(想象一个二维图上的一堆数据点,看起来像是3臂的螺旋,有点像银河系),所有点都属于其中一个这些武器。 神经网络的工作是对每个点属于哪个分支进行分类。 这不是我自己的...

    Inferno-League-Bot:地狱联赛Bot(1nside)

    npm install ://仅在运行bot来安装依赖项时才第一次执行npm install node main.js : 在节点main.js之后,机器人将运行并加入config-example.js中exports.room中指定的房间。 机器人命令 Bot包含一些有用但不太...

    ecdqemsd-tetris:俄罗斯方块在后台听案件的同时播放,穿上它!!!

    当水平线结束时,该线消失,位于其上方的所有棋子都下降一个位置,从而释放了游戏空间,从而简化了放置新棋子的任务。 碎片的下落逐渐加快。 当棋子堆积到顶部(可见区域中的3x5块)时,游戏结束,从而干扰了更多...

    c#Linq distinct不会调用Equals方法详解

    我有以下课程 public class ModInfo : IEquatable { public int ID { get; set; } public string MD5 { get; set; } public bool Equals(ModInfo other) ... return other.MD5.Equals(MD5);...public void Relo

    信息

    schnatterer.info 建立 # Install ruby sudo apt-get install ruby-full build-essential zlib1g-dev # Install gems for local user ...# Start jekyll development server with client-side live-relo

Global site tag (gtag.js) - Google Analytics