Understand:高效代码静态分析神器详解(一)
Understand:高效代码静态分析神器详解(一)
之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source insight软件还强大的代码静态分析工具,堪称神器–Understand。这款软件具有强大的代码静态分析功能,并且可以绘制各种流程图。另外,Understand拥有Windows版本、mac版本和Linux版本,所以在这三种系统任何一个下面都可以使用。
因为工作太忙,还没有时间详细的研究一下使用方法,只是简单的了解了一下,由于该软件可以帮助你快速的分析代码结构流程,因此我提前分享给大家,希望和大家一起研究,共同学习,下面我针对这个软件做个初步讲解,后续会出详细讲解,由于软件是全英文的所以有问题的地方望大家指出,我会及时更正。
由于安装很简单,在此就不说了,直接进入工程配置讲解。
导入项目
导入项目有两种方法,一种是从菜单栏点击File–>New–>Project,另一种是点击下面界面中间的New Project
点击后,会进入到如下界面,你可以更改项目名称为你要导入的项目名称,以便于以后查找,你可以直接导入你正在开发的项目,你的代码更改后,这个项目也会自动更新,方便你快速开发,不需要每次导入。
更改名称后点击Next进入如下界面,这个界面是让你选择你要导入项目包含了哪几种语言,注意,在C/C++后面有两种模式,下面有注释,其中Strict模式包含Object-C和Object—C++,还有Web的注释,自己看看就好了,在此就不再解释,
然后点击Next进入下面界面:
在此界面点击上面的“Add a Directory”,也就是添加你要导入项目的路径,点击后会弹出如下界面,此时有个奇葩就是弹出的界面会被上图界面遮挡,此时你要移开该界面,然后会出现下面界面:
点击后面的带有三个点的按钮选择你要加入的项目文件夹,此处不用打开文件夹,只要点中文件夹点击open按钮:
此时只需要点击OK即可,界面会跳转到如下界面:
此时有两个选项,一个是立即分析代码,一个选择配置,对于我们来说只需要默认即可,然后点击OK按钮,此时软件开始分析代码,分析完成后会出现如下界面:
左侧会出你的项目结构,中间出现你项目的名称,此时你可以操作左面项目来查看相关代码,如下图所示:
这么多类和方法如何快速定位,那肯定是搜索,该软件针对不同位置,不同属性有不同的搜索方法,下面介绍搜索功能。
搜索功能
1.左侧项目结构中搜索:在这个搜索中你可以快速搜索你要查看的类,快捷键,鼠标点击左侧上面项目结构窗口,然后按command + F键会出现如下图所示的搜索框,在框中输入你想要的类回车即可
2.类中方法搜索:将鼠标定位到右侧代码中,点击command + F,会弹出搜索框,输入方法回车即可:
3.在文件中搜索:也就是全局搜索,快捷键F5或者去上面菜单栏中的search栏中查找,输入你想要的类或者方法,回车查找,下面会列出所有使用的地方:
4.实体类查找:软件菜单栏search中最后一项–Find Entity,点击输入你要查找的实体类,回车查找:
快速搜索是软件快速使用必备的技能,包括我们常用的idea一样,快速定位类,方法,常量等,可以快速帮助我们解决问题。
上面我介绍改软件时提到可以绘制流程图等功能,下面就针对这个功能介绍一些一些图形的绘制功能,帮助你快速分析代码。
项目视图
项目视图包含很多的功能,能够自动生成各种流程图结构图,帮助你快速理清代码逻辑、结构等,以便快速理解项目流程,快速开发,视图查看方式有两种,一种是鼠标点击你要查看的类或者方法等上面,然后右键弹出菜单,鼠标移动到Graphical Views,然后弹出二级菜单,如下图所示:
另一种方式是点击要查看的类或者方法,然后找到代码上面菜单栏中的如下图标:
然后点击图标右下角的下拉箭头,弹出如下菜单,即可选择查看相关视图:
层级关系视图分类:
1.Butterfly:如果两个实体间存在关系,就显示这两个实体间的调用和被调用关系;如下图为Activity中的一个方法的关系图:
2.Calls:展示从你选择的这个方法开始的整个调用链条;
3.Called By:展示了这个实体被哪些代码调用,这个结构图是从底部向上看或者从右到左看;
4.Calls Relationship/Calledby Relationship:展示了两个实体之间的调用和被调用关系,操作方法:首先右键你要选择的第一个实体,然后点击另一个你要选择的实体,如果选择错误,可以再次点击其他正确即可,然后点击ok;
5.Contains:展示一个实体中的层级图,也可以是一个文件,一条连接线读作”x includes y“;
6.Extended By:展示这个类被哪些类所继承,
7.Extends:展示这个类继承自那个类:
结构关系视图分类:
1.Graph Architecture:展示一个框架节点的结构关系;
2.Declaration:展示一个实体的结构关系,例如:展示参数,则返回类型和被调用函数,对于类,则展示私有成员变量(谁继承这个类,谁基于这个类)
3.Parent Declaration:展示这个实体在哪里被声明了的结构关系;
4.Declaration File:展示所选的文件中所有被定义的实体(例如函数,类型,变量,常量等);
5.Declaration Type:展示组成类型;
6.Class Declaration:展示定义类和父类的成员变量;
7.Data Members:展示类或者方法的组成,或者包含的类型;
8.Control Flow:展示一个实体的控制流程图或者类似实体类型;
9.Cluster Control Flow:展示一个实体的流程图或者类似实体类型,这个比上一个更具有交互性;
10.UML Class Diagram:展示这个项目中或者一个文件中定义的类以及与这个类关联的类
11.UML Sequence Diagram:展示两个实体之间的时序关系图;
12.Package:展示给定包名中声明的所有实体
13.Task:展示一个任务中的参数,调用,实体
14.Rename Declaration:展示实体中被重命名的所有实体
由于视图比较多,所以就一一贴上代码,主要还是需要自己去调试,查看各个功能视图的展示结构以及作用,孰能生巧,多操作几下就会了,所以不再做过多的解释。最终希望这款软件能够帮助你快速开发,快速阅读别人的或者自己的代码。
Understand:高效代码静态分析神器详解(一)的更多相关文章
- Understand:高效代码静态分析神器详解(转)
之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...
- Understand:高效代码静态分析神器详解(一) | 墨香博客 http://www.codemx.cn/2016/04/30/Understand01/
Understand:高效代码静态分析神器详解(一) | 墨香博客 http://www.codemx.cn/2016/04/30/Understand01/ ===== 之前用Windows系统,一 ...
- Understand:高效代码静态分析神器详解(一) 转
之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...
- Understand:高效代码静态分析神器详解(一)【转】
转自:http://www.codemx.cn/2016/04/30/Understand01/ 之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面, ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- “全栈2019”Java异常第六章:finally代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java异常第四章:catch代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java异常第三章:try代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- php调用C代码的方法详解和zend_parse_parameters函数详解
php调用C代码的方法详解 在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用 2 由于php的性能问题,需要用C来实现部分功能 针对第一种情况,最合适的方 ...
随机推荐
- SQL Server 2005/2008遍历所有表更新统计信息
DECLARE UpdateStatisticsTables CURSOR READ_ONLY FOR 02 SELECT sst.name, 03 Schema_name(ss ...
- Unix环境高级编程(八)进程关系
本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用.通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态.先将本章基本的知识点总结如下,日后再看时候 ...
- <<Python基础教程>>学习笔记 | 第10章 | 充电时刻
第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...
- Asp.net 用户控件和自定义控件注册
在ASPX页中注册用户控件的方法 <%@ Register Src="ListPicker.ascx" TagName="ListPicker" Tag ...
- 【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet
接上述案例找BUG:[iOS开发-51]案例学习:动画新写法.删除子视图.视图顺序.延迟方法.button多功能使用方法及icon图标和启动页设置 (1)BUG:答案满了就不能再点击optionbut ...
- Xilinx全局时钟
前言 Xilinx系列.ISE环境中,设计复杂工程时全局时钟系统的设计显得尤为重要. 一.时钟网络与全局缓冲 在XilinxFPGA中,时钟网络分为两类:全局时钟网络和I/O区域时钟网络.以全铜工艺实 ...
- leetcode-000-序
一直以来学习的都是些理论,编程一直用的也是MATLAB,其他语言很少涉及.希望自己弥补这一块短板,时间初步定在五月底,拿出半个月时间学习Python,学多少算多少. 直接从leetcode开始: ar ...
- Mysql5.6.22源代码安装
二:安装MySQL 安装编译代码需要的包 yum -y install make gcc-c++ cmake bison-devel ncurses-devel 下载MySQL 5.6.14 wget ...
- mysql特殊语句学习
一.Mysql ON子句和USING子句 Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name. 当模式设计对联接表的列 ...
- cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)
四,Director Scene Layer和Sprite(导演,场景,层和精灵) 1.Scenes(场景) 一个场景 (用CCScene对象实现)相当于APP工作流的独立部分.一些人也喜欢叫做“屏幕 ...