已剪辑自: https://mp.weixin.qq.com/s/F-gafwbZswpnY8EaCz8HxQ
不管是玩单片机还是嵌入式linux,只要是与硬件结合比较紧密的部分目前基本上还是C语言,当然了,不知道以后C语言会不会被取代,即便哪天被某种更加优秀的语言取代,对于大部分使用者而言也仅仅只是语法发生一些变化而已。更何况目前C语言渗透到嵌入式行业的各个角落,即使编程语言需要替代也是一个渐变的过程。想必大家在入门C语言的时候,一定会碰到这样的问题:“C语言程序的基本组成单位是什么?”,如果你没坚定的回答上来,那得怀疑一下自己的C语言功底了。没错,C语言程序是由函数构成的,函数是C程序的基本组成单位。这句话很简单,但是也同样太值得深入思考了,为什么不是变量、也不是执行顺序呢?在bug菌往期的一些文章中,其实隐隐约约有提到过一些,只要你把函数名称规范好、函数封装有理有据,基本上不需要写太多的注释,函数的名称就是最好的“文档”说明,而要读懂这篇“文档”无非就是要理顺函数之间的调用关系。没错,理顺函数之间的调用关系确实是你理解C语言程序、了解其代码原理和实现过程的关键,特别是一些大型工程代码,几乎不可能留给你足够的时间一句一句的参悟,更何况很多算法和处理策略都是比较成熟的实现,没必要重复的、花大量的时间去理解,当然了,如果你是针对性的学习和优化那就另当别论了。对于理顺函数之间的调用关系不同的人有不同的方式方法,比如一个函数一个函数的粗略阅读,然后单独拧出相关函数进行记录和整理,最后变成流程图或者结构图等等。也有朋友通过直接在函数内部添加打印函数,程序一旦运行就可以在相应的打印窗口列出函数之间的调用层次关系。当然还有非常多的方法,每种方法有优劣,但从效率方面考虑还是让软件根据我们的需求自动识别函数调用关系,并以一种更加形象直观的方式呈现给我们来使用和理解。对于目前在嵌入式软件中比较优秀的编辑器都有着查看函数调用关系的功能或者插件,bug菌用得比较多的还是Souceinsight的Relation Window窗口,你可能会问了为什么喜欢用SI?简洁、方便,能够满足我平时的阅码需求。
3
SI的Relation Window
那么这里就根据我平时的使用,简单聊一聊SI这块的功能。
SourceInsight的符号关系功能展示在如下位置打开:
这里简单的编写了一个函数调用关系,来看看关系窗口的展示:
可以看出函数调用关系已经为我们完整的展示。
并且可以通过点击左下角相关设置来改变函数调用关系的样式,SI的关系窗口主要是两种类型的视图:outline大纲视图和图形视图,前面我们展示了大纲视图,如下是另外两种图形视图展示:
有这功能在手,理解程序的速度不知道加快多少倍?
当然了再好的功能也需要使用者多熟悉,并勤加练习,不仅如此有时候我们需要了解更多的符号信息或者筛选出我们想要了解的关系,那么这些配置项目都可以在关系窗口的配置中供我们使用。
比如是否需要对符号进行自动跟踪的设置,对函数调用展开到第几层,对于关系视图中那些类型的符号可以过滤或者展示等等都可以根据你所要展示的效果进行设置,以便我们剔除掉一些不需要关注的符号关系信息,更加直观的分析整个工程的全貌。