iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

08 | 如何利用 Clang 为 App 提质?

Clang tools
可以改变代码、做检查、做分析
独立运行的语法检查和代码重构工具
集成到编译中
在 AST 上进行操作
访问 Clang 的高级抽象能力
高级 C 接口
架构模块化
Fix-it 提示
对 typedef 处理良好
代码诊断强大
编译速度快
Clang 静态分析器
自动完成代码重构
静态代码分析
LibTooling
Clang Plugins
LibClang
Clang AST
语法分析
词法分析
Clang 源码质量高
替代 GCC
优势
基于 LibTooling 编写简单语法转换工具
搭建 Clang 的开发环境
应用
Clang 提供的能力
Clang 的功能
Clang 提供的丰富接口功能
课后作业
解决方案:使用 Clang 进行静态分析
问题:代码不规范、执行不到位导致代码质量过差
如何利用 Clang 为 App 提质?

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。
以前在工作中,有段时间连续发生了多次线上事故,在复盘时大家都提出是因为代码不规范、代码规范执行不到位,从而导致代码质量过差,无法监管,我们才被动处理线上事故。会上牢骚发完,会后应该怎么执行呢?
我们都知道,监管手段是需要自己动手建设的,第三方工具无法满足所有的业务技术规范监控。在上篇文章“Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?”中,我们提到通过 Clang 提供的丰富接口功能就可以开发出静态分析工具,进而管控代码质量。
除此之外,基于 Clang 还可以开发出用于代码增量分析、代码可视化、代码质量报告来保障 App 质量的系统平台,比如CodeChecker
比如,当周末发现线上问题时,你会发现很多时候分析问题的人都不在电脑边,无法及时处理问题。这时,我们就需要一款在线网页代码导航工具,比如 Mozilla 开发的 DXR,方便在便携设备上去操作、分析问题,这样的工具都是基于 Clang 开发的。
Clang 的功能如此强大,那么它到底是什么呢?Clang 做了哪些事情?Clang 还提供了什么能力可以为 App 提质呢?今天,我们就一起来看看这几个问题吧。

什么是 Clang?

关于 Clang 是什么,你可以先看一下如下所示的 iOS 开发的完整编译流程图。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Clang 是一个强大的编译前端工具,为 C、C++、Objective-C 提供了丰富的接口功能,可以用于静态分析、代码增量分析、代码可视化和代码质量报告。Clang 的优势包括快速编译速度、低内存使用率、精确的代码诊断和 Fix-it 提示等功能。此外,Clang 还提供了稳定的高级 C 接口 LibClang,可以访问 Clang 的高级抽象能力,如获取 Token、遍历语法树和代码补全。文章还介绍了 Clang 的工作原理,包括词法分析、语法分析和生成抽象语法树等过程。通过阅读 Clang 源码,可以提升编程思维能力,特别是在编写自定义插件或工具时。总的来说,Clang 提供了丰富的功能和接口,可以帮助开发者提高代码质量和效率。LibTooling 是一个 C++ 接口,通过它能够编写独立运行的语法检查和代码重构工具。与 Clang Plugins 相比,LibTooling 无法影响编译过程,但基于能够完全控制 Clang AST 和可独立运行的特点,可以做的事情就非常多了,比如改变代码、做检查和分析。在 LibTooling 的基础之上有个开发人员工具合集 Clang tools,提供了一些工具,如语法检查工具、自动修复编译错误工具、自动代码格式工具等。通过对 AST 的完整遍历以及节点数据获取,就能够对数据流进行分析,还能够模拟内存分配进行分析。Clang 静态分析器使用的就是 Clang AST 接口,对于节点 Stmt、Decl、Type 及其派生节点 Clang AST 都有对应的接口,特别是 RecursiveASTVisitor 接口可以完整遍历整个 AST。这些工具和接口为开发者提供了丰富的功能和灵活性,可以帮助提高代码质量和效率。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • Roger
    喂完奶来评论下,最近摸索出了学习这套教程的方法:先看文章,配合着音频防止走神。然后在github和google上搜索相关知识进行系统学习,比如之前讲到的启动优化,github上就有非常好的启动优化总结。再比如LLVM相关知识,腾讯课堂里小码哥就讲得非常仔细。所以将文章作为引子,然后系统的学习吧!

    作者回复: 赞

    2019-03-28
    59
  • tomcat
    我这里有一个利用clang libtooling进行方法名替换的应用,大家可以看看加深理解,https://www.jianshu.com/p/3a8fb6f7c55f

    作者回复: 赞

    2019-03-30
    2
    8
  • 鹏哥
    老师,前面的课程中你提到对某一领域要做到精而不是都只是了解,那你这里有这么多内容,我应该怎么选择需要去深入研究的内容呢?还是说所有的都需要去深入研究?

    作者回复: 根据工作需要来选择吧

    2019-03-28
    8
  • LaiYoung_
    我写了两篇入门文章 https://github.com/CYBoys/Blogs/blob/master/LLVM_Clang/LLVM%20%26%20Clang%20%E5%85%A5%E9%97%A8.md 和 https://github.com/CYBoys/Blogs/blob/master/LLVM_Clang/Clang%20Plugin%20%E4%B9%8B%20Debug.md 还有一个关于代码规范的插件,没有戴老师写得好

    作者回复: 赞

    2019-04-01
    2
    4
  • Geek
    每天学一课都能感觉到自己的进步,课程很好,就靠学习来打发无聊的时间了

    作者回复: 有进步就好,赞

    2019-03-29
    2
  • cc
    都不懂 我该何去何从呢

    作者回复: 找到场景就有学下去的动力了,下一篇会提到 Clang 的一个很实际的用处。加油

    2019-03-28
    2
  • Guarantee
    老师,图片上的中间代码 IR,是不是汇编代码?

    作者回复: 不是,是一种平台无关的中间代码

    2019-07-20
    1
  • drunkenMouse
    当我准备就绪打算开始写的时候,发现自己好像。。都不会Lisp语言 今天的作业够呛了。。

    作者回复: 哈哈

    2019-03-31
  • lion
    对于Clang这一块确实了解和接触的比较少,看了老师的文章,觉得似乎打开了一条新的通道,但是又感觉老师讲的东西有点多,不知道该从哪开始,所以想请教下如果想接触这块知识的话,从哪里着手比较好呢?

    作者回复: 从实践开始,下篇会提到一个具体可以实践的场景

    2019-03-28
  • 里奇
    老师可以写一点单元测试和持续集成相关的知识吗?
    2019-03-28
    9
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部