您现在的位置是:首页 >学无止境 >嵌入式代码查看分析利器---Understand网站首页学无止境
嵌入式代码查看分析利器---Understand
平时在开发嵌入式程序的时候大多数使用的都是keil软件,一般小的工程使用keil没感觉到有什么问题,但是当工程比较大的时候,比如移植了FreeRTOS系统或者LWIP网络系统时,代码全部编译一次就要花费很长世间,特别是开启了点击函数右键跳转的功能之后,速度更加慢。有时候只是为了查看一下代码,为了能够使用函数跳转功能,就不得不把工程全部编译一遍。
为了提高开发效率,一般查看代码的时候会使用vscode 和 source insight 这类软件,但是vscode占用内存比较大,电脑配置比较来的话,电脑就会比较卡。source insight占用内存比较小,功能和使用方法上感觉没有vscode方便,但是source insight 有个优点就是可以查看函数调用关系图。
这个功能用起来感觉很方便,特别是查看别人代码的时候,能有一个直观的感受。于是平时就是vscode 和 source insight 这两个软件交替使用。
直到前几天无意中发现了Understand这个软件之后,vscode 和 source insight 就再也不想用了,特别是Understand 强大函数关系图生成功能。用一次之后就再也回不去了。先上一张图感受下。
下面就详细说一下如何使用Understand软件。在浏览器中直接搜索Understand 进行下载安装破解,具体过程网上教程很多,这里就不再演示了。
下载安装完成之后,打开软件。
如果要查看代码的话,不能像vscode那样直接把文件夹拖入到软件界面中直接打开。要使用这个软件必须要给要查看代码先建一个工程。
在桌面上新建一个code文件夹准备存放Understand的工程文件,FreeRTOS移植实验是要查看的代码。 也可以不新建code文件夹,Understand的把工程文件直接存放在FreeRTOS移植实验里面。
不过我一般习惯在将Understand的工程文件单独放在另外的目录里面。这样查看别人的代码时,不会破坏keil工程文件的完整性。
接下来在Understand软件中新建工程,选择文件–新建–工程。
在弹出的界面中点 添加文件夹按钮,添加要查看的keil工程文件夹。
这里选择要查看的这个 FreeRTOS移植实验
单击继续按钮
选择第二个选项,不编译代码。
接下来选择Understand工程文件存放目录,默认会创建在keil工程目录里面,在这里将工程目录设置为刚才新建code文件夹路径。
单击后面的 … 按钮,将工程路径选择为code文件夹,然后点保存按钮。
工程路径设置好之后,单击创建工程按钮,开始新建工程。新建工程的时候需要花费十几秒的时候对工程文件进行扫描,这里要耐心等待一会。
工程扫描完成之后,就会自动出现一个工程文件分析的界面,在这个界面中可以看到工程里面各部分代码的占比情况。
第一个图展示的是代码、注释、未使用、预编译、空白 这些占用行数。
第二张图展示的是不同代码在工程中的占比。通过这个可以看出FreeRTOS占30.1%,库函数占了62.7%。
通过下面的柱形图中还能看出比较占比比较大的函数和文件。
通过这个整体的分析图让我们对这个工程文件构成有一个整体的印象。下面开始使用这个软件对代码进行具体的分析。在软件界面的左侧选择工程浏览,然后打开user文件夹里面的main.c文件。
在main.c文件中双击选中main函数,然后再工具栏中点这个连接按钮。
在这里选择第一个选项
此时就会显示出main函数中调用了哪些函数。
这里默认情况下只显示了1层的调用关系,如果要显示多层调用关系还需要设置一下。界面有右上方有两个 三条横线的图标,点击下面这个三条横线图标。
将这个被调用的深度设置为3。
接着把调用深度也设置为3。
接下来就会重新生成一个函数调用关系图。
滚动鼠标滚轮可以放大缩小这个关系调用图。
通过这个关系调用图就可以很清晰的看出来main函数分别调用了哪些函数,而这些函数里面又继续调用了哪些函数。这样即使不用看代码直接通过这个函数调用关系图就能看出来main函数里面都完成了哪些功能。
接下来依然选择main函数,在关系调用中选择第二个功能。
通过右上角的的选项按钮将层设置为5,这样就会显示出一个5层的调用关系图。
在这个调用关系中可以看到,好多函数都调用了同一个函数。而有些函数是我们不需要关系的,那么就可以在这个函数上单击鼠标右键,选择隐藏,将这个函数隐藏掉不显示。
如果想要重点关系某一个函数的调用关系,可以在函数上右键,选择高亮显示。比如在这里要重点关心任务创建函数。
此时任务创建函数前面和它相关函数和路线都会被高亮显示。
如果想进一步了解这个函数的其他信息,可以在这个函数上单机鼠标右键,在属性中查看,这里就不再一一列举了。
接下来看关系调用的第三个选项。
此时就会生出一个main函数内部的执行流程。
接下来看关系调用的第四个选项。
这个列出来了main函数调用的函数和main函数的返回值。
接下来看关系调用的第五个选项。
这个列出来了main函数所包含的头文件和宏定义
接下来看关系调用的最后一个选项。
这个会显示出main函数调用的那些初始化函数都包含在哪些c文件中。
通过上面这个6种功能,可以对main函数和其他函数的调用关系进行各种方式的分析,让我们对这个工程代码能进一步的深入了解。
同样Understand软件也可以直接查看代码。如果要掉转到函数内部时,按住ctrl键,单击鼠标左键,就能直接跳转到函数中。后退一步的快捷键是ctrl+alt+p 。
如果想要使用快捷键的话,可以在菜单栏选择Tool—options
在打开的设置界面中选择Key Bindings,在右边区域中就可以查看和设置快捷键。
查看函数的时候,在函数开始位置的大括号处双击鼠标左键,就会自动选中函数所包含的代码块。
将鼠标放在函数名上面时,会显示函数的参数和返回值。同样将鼠标放在宏定义的值上时,会显示宏定义的值。
这个软件还有很多强大的功能,在这里只是粗略的介绍了一下,其他功能大家在使用的过程中自己慢慢探索。