款经典代码阅读器的使用方案对比标识符调用json

来 源 | 大淘宝技术团队

代码阅读是技术人的必备技能之一,高效地梳理代码能够极大程度上提高开发人员的工作效率,进一步为业务创造新价值。

背景

谈起代码阅读,大部分技术人员都不会陌生。无论是刚开始学习代码的小白还是久经沙场的代码大神,不管是学习优秀的开源项目还是做老项目的重构,代码阅读都是技术人的必备技能之一。在目前业务迭代迅速的环境下,高效地梳理代码能够极大程度上提高开发人员的工作效率,进一步为业务创造新价值。

笔者搜罗了几种业内常用的代码阅读方案,并从效率,易用,成本以及是否可调试四个角度进行对比,读者可以根据自己的喜好选择合适的代码阅读方案,也可以在评论区留下代码梳理的经验,欢迎讨论。

评分仅代表个人观点

IDE 阅读

效率:⭐️

易用:⭐️⭐️⭐️

成本:⭐️⭐️(部分IDE需要收费使用)

是否可调试:是

IDE(Integrated Development Environment)应该是每个技术人员每天工作中接触时间最长的一类软件,尽管不同语言有不同的IDE,但殊途同归,IDE的核心功能是用来做代码编辑,很多IDE也在代码编辑层面做了性能上的优化。

尽管各类IDE都通过各种方式实现了代码阅读以及代码梳理的功能,但由于其作为编辑器的本质属性,从代码阅读的角度来讲面对很多大型项目易用性和效率比较低,难以快速阅读代码。

以Java为例,目前业界比较常见的IDE包括IntelliJ IDEA和Eclipse等,笔者比较熟悉IDEA,即以IDEA举例。

就IDEA而言,除了通过鼠标点击追踪(Tips: mac下默认快捷键Command+B,windows下默认快捷键Ctrl+B)的方式阅读代码外,还有很多辅助阅读代码的插件,包括RainbowBrackets(多彩括号,多重嵌套代码分析),Statistic(代码行数统计),SequenceDiagram(时序图绘制)等。

尽管IDE能够覆盖日常工作中的大部分场景,但面对大型项目的分析(如Android源码或者linux源码)就捉襟见肘,其效率及易用性较低的原因主要有以下几点:

1.绝大多数IDE对代码的分析速度较慢。由于大多数IDE在代码编辑层面做了优化,加载代码的过程需要消耗更多的资源(代码之间的关系识别等)。同时,在加载大型代码时,会造成严重的卡顿,影响用户体验;

2.针对代码阅读,很多IDE要求对代码进行编译,否则就会产生大量“飘红”,无法进行代码阅读。一个大型项目往往需要非常久的编译时间,并且环境配置的难度极大,降低了代码阅读的效率;

3.常用的IDE往往针对某种语言进行了特化(当然也有类似CLion的跨平台IDE),对其他语言的支持程度不高,如果项目中存在跨平台的问题往往难以通过单一IDE进行代码阅读。

微软的VSCode面世后,很多开源作者陆续推出了代码阅读的魔法级插件(CodeRunner,PartialDiff,TODOTree等等)以提升代码阅读体验,相信在各路大神的努力下,IDE阅读法终将成为最好的代码梳理方法。

Source Insight

效率:⭐️⭐️⭐️⭐️⭐️

易用:⭐️⭐️

成本:⭐️⭐️⭐️⭐️⭐️

是否可调试:支持第三方命令

世界上只有两种人,用过SI的人和没用过SI的人,SI的出现让很多开发人员第一次感受到了代码阅读的快乐(相信很多Android开发者都用这个神器阅读过Android源码)。如果说IDE是专注于代码编写的平台,那么SI就是专注于代码分析的神器。SI为开发人员提供了以下核心功能:

1.快速的代码分析:SI能够通过内置引擎快速分析代码,并形成继承树以及函数调用树,占用资源量极小。

2.准确的代码查找:SI支持快速查看函数和变量使用位置的功能,几乎立即自动显示对函数、变量、类等的引用。

3.多种语言支持:Source Insight 内置了针对 C/C++、C#、Java、Objective-C 等语言的动态分析工具。

SI几乎能够完成代码链路分析中的全部工作,但它也有着不容忽视的缺点:

1.成本较高。SI是收费软件,需要缴纳高昂的费用才能使用其全部功能。

3.界面样式较老且没有官方中文插件,这导致了其易用性较低。

Understand

效率:⭐️⭐️⭐️⭐️

易用:⭐️⭐️⭐️⭐️⭐️

成本:⭐️⭐️⭐️⭐️⭐️

是否可调试:支持第三方命令

Understand是一款小众的代码阅读工具,国内的使用人群不多(主要原因是太贵了,并且没有Souce Insight那么多魔法可用),但有很多外国公司利用该软件进行日常的代码分析以及缺陷查找工作。Understand的核心功能和Source Insight比较类似,包括:

1.强大的图形绘制能力,包括继承关系图,函数调用图,包含关系图等等。

3.方便的搜索功能,能够快速查找及定位指定的标识符。

利用Understand通过代码直接生成流程图,相比较而言个人更喜欢Understand生成的各类图形,样式而言比Source Insight更为优雅

相比Source Insight,Understand支持在Mac平台及Linux平台上运行,但从用户的反馈看在进行代码分析时存在着一定的资源消耗过多的现象。与Source Insight一样,Understand也是需要付费的,而且没有免费试用版本,同时也不支持中文。

OpenGrok

效率:⭐️⭐️⭐️

易用:⭐️

成本:无(开源)

是否可调试:否

OpenGrok是一款用 Java 编写的高效源代码搜索和交叉引用查询引擎,能够帮助开发人员深入了解代码,主要具有以下几个核心功能:

1.强大的依赖分析能力,借助内置的Analysis引擎,OpenGrok支持多种版本管理工具,能够根据代码的提交历史进行代码分析,并为源码的变量/对象、结构体/类、函数/接口、宏等生成可供快速搜索的索引文件。

2.快速高效的代码搜索功能,支持不同类别的搜索并直达代码。

OpenGrok对代码管理工具做了特化性的支持,能够便捷快速地看到对应代码行的提交信息以及提交历史。

Sourcetrail

效率:⭐️⭐️⭐️

易用:⭐️⭐️⭐️⭐️

成本:无(开源)

是否可调试:支持IDE调试

和OpenGrok一样,Sourcetrail也是一款开源的代码分析工具,并支持跨平台代码分析。Soucetrail提供了以下几个功能:

1.以脑图的形式展示了函数调用链路。在分析代码的同时,Sourcetrail提供了优雅的图形化界面以展示工程项目中的各类标识符信息以及链路图,能够让人更为直观地了解整个工程的链路信息。

2.优秀的跨平台支持,提供了Linux,Mac以及Windows等多个平台的安装包。

3.提供了扩展接口,可用于自定义语言分析。

Sourcetrail是一款非常强大的代码分析工具,使用起来非常简单灵活,而且还可以关联IDE。但是其对软件拓扑的分析存在一定局限性,并且作者已经宣布不再更新,需要根据使用场景谨慎选用。

实战测试

在该模块,我们将针对一款开源软件的核心链路分别采用上述几种代码阅读方案进行分析,以对比各类工具在实际操作中的效果。由于Source Insight和Understand均需要收费,本次仅采用IDE阅读法,OpenGrok以及Sourcetrail进行核心链路的简要分析。

2.代码版本:1.2.76

3.代码语言:Java

IDE 阅读

由于阅读的目标是java代码,拟采用IntelliJ IDEA进行代码阅读。

核心代码定位

可以看到,parseObject存在很多重载方法,为了找到核心方法,需要逐级查找,过程比较繁琐。

核心代码链路分析

在链路分析层面,首先可以分析核心类对应的继承关系,以初步分析各个类之间的关联关系。

接着可以借助各类插件实现初步的代码分析,绘制时序图,UML图等等,但想要深入了解代码结构还需要深入源码进行阅读,可视化支持程度不高。

OpenGrok 阅读

OpenGrok的安装过程比较繁琐,有web开发经验的同学推荐根据官方文档的安装方式进行安装及配置。

核心代码定位

OpenGrok有着强大的代码搜索功能,支持正则以及各类多条件表达式,并且由于预先进行了索引分析,代码搜索的速度比常规IDE迅速了很多,能够快速定位核心代码。

核心代码链路分析

OpenGrok的一大缺点在于其不支持代码的可视化分析,在进行代码阅读时需要开发人员手动梳理链路。但其对代码中的各类标识符(symbol)均增加了支持快速查找的链接,相比ide而言,在阅读依赖关系比较复杂的代码过程中能够起到比较显著的提效作用。

Sourcetrail 阅读

Sourcetrail官方提供了支持各类平台的二进制安装包,支持一键安装,非常快捷。

核心代码定位

Sourcetrail同样集成了高效的代码搜索功能,用户可以在搜索栏全局搜索代码。相比OpenGrok,Sourcetrail的界面设计更为清晰,但建立索引的速度相对较慢,且不能查看代码的历史提交信息。

该工具的一大优点在于利用脑图的形式展示了各类方法之间的调用关系,链路梳理比较清晰,能够让用户快速找到核心代码所在位置。

核心代码链路分析

在代码链路分析上,Sourcetrail没有进行代码的拓扑关系分析,但能够通过点击脑图的形式结合代码阅读对代码链路进行梳理。通过IDE插件的形式可以将Sourcetrail与IDE关联,有效提高我们代码阅读的效率。

总结

方法

效率

易用

成本

是否可调试

IDE阅读

⭐️⭐️⭐️

⭐️⭐️

Source Insight

⭐️⭐️⭐️⭐️⭐️

⭐️⭐️

⭐️⭐️⭐️⭐️⭐️

支持第三方命令

Understand

⭐️⭐️⭐️⭐️

⭐️⭐️⭐️⭐️⭐️

⭐️⭐️⭐️⭐️⭐️

支持第三方命令

OpenGrok

⭐️⭐️⭐️

Sourcetrail

⭐️⭐️⭐️

⭐️⭐️⭐️⭐️

支持IDE调试

技术学习是一个不断积累和沉淀的过程,优秀的代码阅读工具能够提高我们学习和积累的效率,相信每个技术人内心都有一套自己学习技术的方法,希望笔者的文章能够帮助你在今后的学习与工作中提高效率,勇攀高峰。

技 术 好 文

企 业 案 例

云 专 栏

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

THE END
0.Groovy的Json解析package cn.codeduck.groovy02 import groovy.json.JsonOutput import groovy.json.JsonSlurper class JsonTest { public static void main(String[] args) { objToJson() jsonToObj() } // JsonSlurper // JSON文本或阅读器内容解析为GjvzquC41yy}/lrfpuj{/exr1r164cm8:fe9ff<
1.json阅读器app下载json阅读器app安卓版下载v3.22.04json阅读器APP为用户们提供了非常好用的手机阅读服务平台,用户们在json阅读器APP能够获取到非常多的阅读资源,海量的小说资源为用户们带来更多阅读选择。软件汇集了百万小说阅读资源,各种类型一网打尽,搜索获取到自己喜欢的 小说资源,在线进行小说阅读,自由切换书源和阅读方式。 jvzquC41yy}/e{xm{0ipo8xqhv553:92;0nuou
2.JSON文件查看器:专业的json格式数据查看工具1.2 JSON的特点 语言无关:JSON被设计为与编程语言无关,几乎所有编程语言都支持JSON格式。 轻量级:它的文本传输大小和处理速度快。 易于阅读:JSON格式的数据结构清晰,阅读方便。 1.3 JSON的应用场景 JSON广泛应用于Web开发中进行数据交换,如API接口的数据交互格式。在移动应用、桌面应用、服务器配置、数据库存取等方面jvzquC41dnuh0lxfp0tfv8|gkzooa=7823=148ftvkimg8igvcomu866;3>79<;
3.JSON数据转换器:跨平台数据交互工具JSON的起源与重要性 JSON是由Douglas Crockford在2001年推广的一种轻量级数据交换格式。与XML相比,它更简洁,易于阅读和编写,且对人类和机器都友好。JSON允许开发者用简单的文本格式来传输和存储数据,无论是在客户端还是服务器端,都能够轻松地处理。 JSON的基本组成 jvzquC41dnuh0lxfp0tfv8|gkzooa<:8;87248ftvkimg8igvcomu8672964;B8
4.JSONCmd Markdown 编辑阅读器,支持实时同步预览,区分写作和阅读模式,支持在线存储,分享文稿网址。jvzquC41yy}/|‚gwnwu/exr1{cthhlm51puug875;7<7
5.Java实现解析JSON大文件JsonReader工具详解javaendArray() void 使用JSON流中的下一个令牌,并断言它是当前数组的结尾。 beginObject() void 使用JSON流中的下一个令牌,并断言它是新对象的开始。 endObject() void 使用JSON流中的下一个令牌,并断言它是当前对象的结尾。 close() void 关闭此 JSON阅读器 和底层 Reader. getPath() String 返回JSON值中当jvzquC41yy}/lk:30pku1jwvkerf1;<453=/j}r
6.Json格式查看器V1.2下载软件介绍 Json格式的数据阅读性很差,但是日常开发调试中难免要阅读,如果数据量不大还好,数据量大的话简直是噩梦(我就碰到过)。 终于让我找到一个不错的Json阅读器,支持粘贴数据并进行可视化展示以及自动格式化数据的功能。 Json格式查看器下载地址 普通下载jvzquC41yy}/zrf|ckhb0lto1jznn8:955?/j}rn
7.阅读体验革命:10大JSON书源格式优化技巧让你阅读如飞JSON书源的应用不仅仅局限于互联网服务,它已经被应用到各种软件和系统中,例如智能设备的数据同步、电子书的阅读器、服务器配置信息的存储等。它的普及不仅依赖于技术的先进性,更取决于其良好的跨平台性,以及与现代编程语言的良好兼容性。JSON书源在移动应用的开发和数据交换中尤其重要,由于其小巧和高效,很多API服务都jvzquC41ygtlw7hufp4og}4eqn{np893oyw7r5q
8.如何在颤动中解码大型json数组腾讯云开发者社区问如何在颤动中解码大型json数组EN我有一个相当大的json文件,它是我使用flutter应用程序从web api下载的jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c|p18;882;4cpu}ft86244:46
9.Json格式查看器(汉化中文版)jsonviewer终于让我找到一个不错的Json阅读器,支持粘贴数据并进行可视化展示以及自动格式化数据的功能。JSON Viewer——Json格式化查看工具,可以对JSON字符串进行格式化显示,可以快速将Json字符串排列规则的树结构,以后于浏览和分析。非常适合做WEB开发或Android开发使用 json viewer中文版功能介绍 点击Format可以方便 jvzquC41yy}/k}j{g0ipo8wguq{sen4js|t`upq332;.;=;338?
10.Feeder首页文档和下载AndroidRSS阅读器应用Feeder 是一款适用于 Android 的实用 RSS/Atom/JSON 新闻阅读器应用程序。 特征 离线阅读 通知支持 OPML 导入 / 导出 Material 设计 快速安装 克隆项目: git clone --recursive https://github.com/spacecowboy/Feeder.git 然后构建应用程序并将其安装到通过 USB 连接的手机上: ./gradlew installDebug 展开阅读jvzquC41yy}/q|hjkpg/pny1r1lfgmjt
11.5款经典代码阅读器的使用方案对比就IDEA而言,除了通过鼠标点击追踪(Tips: mac下默认快捷键Command+B,windows下默认快捷键Ctrl+B)的方式阅读代码外,还有很多辅助阅读代码的插件,包括RainbowBrackets(多彩括号,多重嵌套代码分析),Statistic(代码行数统计),SequenceDiagram(时序图绘制)等。 用SequenceDiagram自动化分析fastjson(1.2.84)中核心链路JSON.parseObjvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1B=9948
12.S3选择操作JSON 使用 SQL 语句从 JSON 文档中扫描和抽取信息。 它可以通过各种方式嵌套,例如在对象或数组中。 这些对象和数组可以在彼此之间进一步嵌套,而不受任何限制。 JSON 是格式结构。 S3 选择引擎支持使用 JSON 阅读器在 JSON 格式输入数据的基础上使用 SQL 语句,从而支持扫描高度嵌套和复杂 JSON 格式的数据。 例如,具有几千兆jvzquC41yy}/kkr0eqs0fxhu1|n0u}ttcik.enuj194109Dvqrod?juk/u9.unqgev3prnwcvkuou
13.【阅读app解除书源版】阅读app无广告版下载(内置书源)v3.23.110究极书源3.7:https://www.yck000ceo.com/yuedu/shuyuans/json/id/255.json 品书阁:https://www.yck000ceo.com/yuedu/shuyuan/json/id/4604.json 常见问题 1、为什么第一次安装好之后什么东西都没有? 因为阅读只是一个转码工具,不提供内容,第一次安装app,需要自己手动导入书源,可以从QQ群、公众号“开源阅读jvzquC41yy}/miy0eun1jsftqoe1::9626/j}rn
14.第1章社会媒体社交数据和Pythonjson.dumps()函数还接收第二个参数indent来指定缩进的字符数量,这对于漂亮的打印效果非常有用。 当手动分析更复杂的JSON文件时,使用一个外部JSON阅读器很可能更方便,这种阅读器可以在浏览器中良好地打印,并允许用户任意地折叠或展开JSON数据。 有些免费的JSON阅读工具是基于Web的服务,如JSON Viewer。用户只需粘贴一段jvzquC41yy}/k}ztkpm/exr0ep5cqxp1vwvvdjwvkerf1;8;27
15.热销智能高速epcgen2阅读器第2代读者rfid复用读卡器藏2个阅读器epc gen 2标签阅读器手持式epc gen2读卡器略读阅读器6英寸智能阅读器nexqo阅读器被动epc gen2阅读器c读者101读者epc c1g2读卡器g 2读卡器dtc读卡器s600读卡器 远程安卓7.1 lmpinj E710/R2000 4/8端口射频识别阅读器超高频JSON格式HTTP/MQTT协议仓库库跟踪 jvzquC41ejoog|j0cnocckf0eqs0i8jre/mfp67/tggeg{3jvor
16.JSON在线解析|菜鸟工具JSON 在线解析是一款 JSON 格式化工具,你可以在线验证、编辑和格式化 JSON 数据,格式化后的 JSON 数据以树形结构展示,更易于阅读,此外还可以将 JSON 转换为 XML、YAML、CSV格式。..jvzquC41e0xvpxtd0eun1owqpv3fpm475
17.将JSON转换为Map|那些遇到过的问题(其中JSON_SOURCE是文件,输入流,阅读器或json内容字符串)此外,如果你想要一个类型化的Map(利用java泛型),你可以这样做:Map <String,MyPojo> typedMap = mapper.readValue(jsonStream,new TypeReference <Map <String,MyPojo >>(){}); (34认同) 如果使用Maven项目,则需要<dependency> <groupId> com.fasterxmljvzquC41sc42t:l0eqs0uo4cum543996;870
18.Gson我们可以根据 JSON 流的来源使用以下阅读器之一: BufferedReader LineNumberReader CharArrayReader InputStreamReader FileReader FilterReader PushbackReader PipedReader StringReader 4.读取 JSON 流 在创建包装了有效 JSON 源的JsonReader之后,我们可以开始对流令牌进行迭代并查看令牌值。 jvzquC41yy}/mjsenq{e0ls1crgdjnhp1juxvxiqkppbxj2|j17:7<823
19.第12–16课:使用VisualBasic的RSS阅读器项目|Microsoft此视频系列专门面向学习有关使用 Visual Basic 2005 速成版创建应用程序的基础知识的用户。本系列包括超过 10 个小时的基于视频的说明材料,为您从创建第一个“Hello World”应用程序直到获得一个功能完善的 RSS 阅读器应用程序提供全程指导。立即学习如何编写您的第一个应用程序! jvzquC41oujo0vnetqyph}3eqo5{j6hp1dkhkwsgt1hc59=:544buy}