〇、简介
如果您是C或C++嵌入式开发人员,编辑器SourceInsight也是个非常不错的选择(使用VIM的大佬请绕道而行),它具有非常强大的代码关联功能,能够很清楚的看到函数的上下级调用关系。个人评价就是两个字“好用”。哈哈哈哈,下面直接按流程开始(看到最后有福利哦)。
一、创建工程
1、打开软件后的默认界面:
图一
2、准备创建工程:
在菜单栏中点击ProjectNewProject,然后会出现对话框如下,分别为当前工程名称和后期该工程代码文件的位置。工程名建议起一个比较容易识别的名称,而工程代码文件可以使用默认的位置或者用户自定义路径。
这里暂时给工程起个名字"useGlib",起完名字后点击OK进入下一步。
图二
3、项目工程相关设置:
然后会进入到如下NewProjectSettings对话框,这里主要设置项目源代码路径位置,其他的可以暂时不设置,采用默认值,等到后期需要时再设置。
图三
4、导入代码文件:
通过手动输入项目路径位置到FileName下,然后回车即可在Directory中看到项目文件夹。或者在Directory窗口下自己通过点击找到目录位置。
然后通过AddTree或者AddAll按钮来添加项目源文件:
AddTree:直接将选中的目录下所有的文件添加到项目工程中;
AddAll:会出现选项用于选择添加当前层级的源文件还是添加当前目录下所有层级的源文件。
文件添加完成之后可以在下面的ProjectFiles窗口看到已经添加的工程源文件,也可通过选中不需要的文件后,点击右边的RemoveFile按钮将其从项目工程中去掉。
待文件添加完毕,直接点击右上的Close按钮即可进入到项目的编辑阅读状态。
图四
创建好工程后的界面:
图五
二、添加符号表
工程创建好之后,如果发现还需要添加其他文件,点击菜单栏ProjectAddandRemoveProjectFiles,或者在工具栏中找到如下图标,是相同的添加方式:
图六
便会再次出现图四对话框,重新添加或者移除文件即可。
等再添加一些文件后,可看到如下图,很多的函数名呈黑色:
图七
一个完整的项目,sourceInsight会将代码中所有的函数,变量,宏都识别出来,然后给出对应的颜色和显示形式,出现这种黑色的说明sourceInsight没有识别出该对象是属于哪类定义,大部分是因为2种情况:
1、该项目工程所有添加的源文件中存在这些函数定义,源文件较多,软件还未加载完,或者停止了加载;
2、该项目工程所有添加的源文件中不存在这种函数或者变量定义;
针对以上的第一种情况,一般是项目的文件过多,后台自动同步比较慢。可以在菜单栏中点击ProjectSynchronizeFiles去立刻触发文件同步,创建项目文件中所有的符号表链接,会出现如下对话框,将红框中选项勾选,然后点击Start选项开始同步(项目较大时等待同步结束的时间较长)。
图八
当同步完之后,发现还存在函数为黑色字符,无法点击跳转到定义处,那这是上述第二种情况。当前的项目工程中不包含该函数,该函数是系统函数或者是其他SDK中的函数。这时候如果期望去看到这样的函数,首先我们需要有这样库函数的源代码文件,然后将其仅仅以额外符号表(不属于本项目工程)的方式导入,供浏览代码使用。
点击菜单栏的ProjectImportExternalSymbolsforCurrentProject,会出现如下对话框(还有另一个标签是ImportExternalSymbol,是为sourceInsight所有的其他项目也添加额外符号表,选择哪个根据情况而定,这里仅仅考虑当前的项目工程)。再点击Add按钮后出现右边的对话框:
图九
再点击ImportfromanINCLUDEpath出现如下对话框,将相关的函数定义文件路径放入空白编辑框,(一定要)按回车确认后出现后一个对话框(图十一)然后再按OK按键。文件即会同步。上图出现的还可以点击Importfromasourcecodetree是出现文件浏览对话框的形式,与此雷同。
图十
图十一
到此可以发现大部分的函数已经由黑色变为彩色,如果可以通过按住ctrl+鼠标左键跳转到该函数的定义处,说明一个项目的创建就已经完成了。
图十二
三、窗口布局/配置
在阅读代码之前还可以做一些辅助措施,让代码阅读工作更加的高效方便。
1、窗口布局
从图十二中我们可以看出,有大片的空白区域没有利用,为了有效利用这些空白区域,可以对布局进行重新布置,只要对相应的小窗口标签进行拖拽即可,这里展示一种布局如图十三,这样可以充分利用空白区域(图十三相对图十二而言多了一个References窗口,后面介绍该窗口的作用和窗口的打开)。
图十三
当创建了一种新的布局,还可以将该窗口布局进行保存,窗口布局相关按钮在工具栏中,如下图红框中的按钮。点击最后一个图标SaveLayout会出现对话框,可以将当前的布局保存起来,保存到ABCD中的任意一种布局按钮中,当下次想再切换使用该种布局,直接点击绿框中的按钮即可还原指定类型的布局。
图十四
2、行号
在图十三中可以看到代码没有行号,在代码前的空白区域右击鼠标出现右键菜单,选择LineNumbers,然后出现如图十六代码行号。
图十五
图十六
如果觉得图十六中的代码行号过于浅显,尤其在后面更换背景颜色的时候,会发现行号更加的浅显,这里可以改变行号的颜色。选择菜单栏的OptionsStyleProperties,在出现的对话框左边的StyleName中找到LineNumber,点击后然后在右边找到Color标签,选择Foreground修改前景色,会发现此时的行号已经变成黑色,清晰易见。
图十七
3、辅助线,编辑选项
在很多的代码规范中,有要求代码缩进不能使用tab键,而要使用空格键,这时候要知道代码前留空的地方是空格还是tab可以通过点击菜单栏OptionsFileTypeOptions出现的对话框来设置,如图十八,勾选Visibletabs和Visiblespaces分别是将tab键和空格键可视化。
图十八
关于EditingOptions编辑选项(上图红框中)下面再介绍几个:
WordWrap:自动换行,代码超过设定的行长时代码会自动换行;
Allowintelligentpaste:智能粘贴,在新的一行粘贴的时候代码会自动加一行新行;
Expandtabstospaces:按tab键转换为相应长度空格键;
Enterinsertsnewline:按回车插入新行;
Showlinenumbers:显示行号;
Showrightmargin:显示右边界线;
Highlightreferencestoselectedsymbol:高亮选中的符号;
SymbolWindow:符号窗口显示,代码的左边窗口;
UseOverview:预览窗口显示,代码的左边窗口;
Tabwidth:tab键占用的字节数
Marginwidth:右边界线的宽度
另外关于缩进,在图十八中右上有个AutoIndent按钮,点击之后,建议将AutoIndentType选择在Simple上。
具体的选项smart和simple的差异在编辑代码时体现,在一个函数后输入大括号,按下回车后的大括号所在位置体现出差异,具体如下图所示,根据个人的编码习惯进行选择即可。
4、背景色
背景颜色可以修改为自己喜欢的颜色,可以在代码编辑区右击出现右键菜单栏,选择SpecialWindowColor出现颜色选择器,然后选择即可。
图十九
如上的方式是临时的,只能改变当前.c代码编辑窗口的颜色,并没有修改其他代码编辑窗口的颜色。如果需要改变整个工程代码编辑区的点击菜单栏OptionsPreferences出现图下图对话框,然后点击ColorFonts标签,选择WindowBackground在点击右边的PickColor即可选择颜色,然后点击确定就可修改代码编辑区的颜色。
图二十
这里修改的是代码编辑区和预览区的背景色,如果想改其他的小窗口颜色,点击小窗口下方的小齿轮,会出现对话框,找到含有FontColor标示的按钮即可修改小窗口的颜色。
5、字体大小
文字大小可以通过点击菜单栏OptionsFileTypeOptions(可以使用快捷键Alt+y)出现如图十八的对话框,在对话框中有如下图的选项,点击ScreenFont设置字符大小即可。
图二十一
6、编码
有时候代码打开后是乱码,需要手动选择文件的编码方式,点击菜单栏FileReloadAsEncoding会出现如下图弹窗,选择自己需要的编码即可。
图二十二
以上方式设置的编码方式是临时的,当打开下一个文件的时候仍然是乱码。可进行全局设置,点击菜单栏OptionsPreferences出现如图二十三对话框,设置红框中编码方式即可实现全局的编码方式。
图二十三
四、阅读/编辑
在上一节中提到的是该软件第一次使用时的一些适合自己习惯的基本配置。这些设置完毕后就可以进行代码阅读工作。以下方法的灵活运用可以极大的提高我们编辑代码和阅读代码的效率。根据以下图大概介绍一下使用频率较高的工具和窗口。
图二十四
看上图标识:
标识1处:前进和后退到历史阅读过的地方;
标识2处:基本的文件操作,分别是新建空白文件,打开文件夹,保存,另存为,全部保存,打印机,剪切,复制,粘贴,在当前文件中查找,查找上一个,查找下一个,多个文件中查找,替换,浏览器查找。
标识3处:到符号定义处,符号信息,符号被使用的地方,查找符号出现的地方。
标识4处:当前文件中出现的符号。
标识5处:当光标放在一个符号上时,标识6处窗口会自动显示哪些符号(函数)调用该出的符号,而标识7处的窗口会自动预览符号定义。
详细情况见后面叙述。
1、快速定位指定位置
根据文件名及行号快速定位
点击ProjectFiles的搜索栏(快捷键CTRL+O),输入指定的函数名,过滤出需要的文件名后按回车,出现该源文件,然后按下快捷键F5或者CTRL+G,输入行号,即可到达指定位置。
图二十五
根据符号表快速定位
点击Projectsymbols(或者快捷键F7)即可输入需要查找的符号,根据符号快速搜索所在位置。这里符号指的是函数名,变量名,宏名等。
图二十六
2、函数调用上下文
当定位查找到函数的位置后,需要查看当前函数的上下文,或者全局变量的调用地方。如图二十七,当鼠标放置在函数上时,Relation窗口会显示调用该函数的方法有哪些,右下角的ContextWindow窗口显示函数的定义。
图二十七
注意ContextWindow窗口只能查看,不能修改,若要修改可以双击ContextWindow窗口进行跳转到该函数的定义处。或者按住CTRL然后鼠标左击函数名同样能跳到函数的定义处。跳到定义处后,若要继续返回查看调用地方可以使用:GoBack(快捷键Alt+)按钮返回。若再次查看定义处就可以用GoForward(快捷键Alt+)。
Relation窗口查看函数被调用处,若看调用处的函数被哪里调用,可以继续点击+号(如图二十八标识1),显示更多的调用关系,或者右键某一个函数,选择ExpandSpecial按钮(如图二十八标识2处),会弹出对话框,给出调用层级数则会显示出指定层级的调用关系。
图二十八
其中Relation窗口有多种显示方式,如图二十九标识1中按钮,点击进行调整显示样式,选择合适自己的显示方式。
图二十九
其中ContextWindow和Relation窗口都是在鼠标光标放到指定的函数上的时候,自动去显示调用关系和定义内容,如果希望是非自动的,可以通过窗口下面的Lock按钮来锁定显示情况,这样显示的内容就不会自动更新。
ContextWindow窗口通过解锁再次更新,而Relation窗口可以点击
refreshRelationWindow按钮来刷新调用关系。
另外函数的调用情况除了通过Relation窗口看以外,还可以通过右键菜单的JumpToCaller(在工具栏上具有相同的图标)来查找调用的地方。
图三十
3、查找工具
SourceInsight的查找工具可以通过快捷键CTRL+/,或者点击工具栏上的图标,会出现如图三十一的对话框。
图三十一
搜索工具选项较多,过于复杂,有选项和查找方式,选项主要使用的就是图三十一中绿框所标注的。
需要介绍的是SearchMethod查找方式,这里查找方式有四种:SimpleString、RegularExpression、KeywordExpression、LookUpReference,下面介绍这几种查找方式的区别:
SimpleString:这是普通的字符查找,可以查找文件中出现的任意字符,但是在工程文件较多较大时,查找的过程会很慢。
RegularExpression:使用正则表达式方式查找,需要会使用正则表达式,属于另一方面的知识,以后有机会再聊。
KeywordExpression/LookUpReference:这两个查找的结果基本相同,但是显示的方式有所区别。这2种方式都是使用SI预先建立的数据库,查找起来比较快,所以这种查找方式用来查找符号(函数,全局变量等)比较快,查找符号时建议使用这种方式。
图三十二
当查找结束后,会出现一个单独标签SearchResult用来显示查找的结果,可以发现每一条结果的前面都有如图三十二标识1的小按钮,需要查看那条结果就点击相应的按钮即可跳到相应的地,进行阅览。跳转到指定的地方后,可以通过图三十二中的标识2按钮进行上一条和下一跳结果的翻阅,或者快捷键SHIFT+F8,SHIFT+F9。
4、编辑功能
点击菜单栏editspecialEdit后能看到其他多种特殊编辑操作。选中一段代码后,然后点击这里面的选项及可以进行相应的编辑操作,如图三十三中的一些文字标注是常用的编辑功能。
图三十三
在菜单栏Edit中有一个SmartRename按钮(快捷键CTRL+),可用于在单个函数内替换字符比较方便,如果替换一个函数内的临时变量,可以使用该替换方式。
在阅读时候可以高亮某个符号,选中某个符号之后,然后右击鼠标选择HighlightWord(快捷键F8)。
五、快捷键
若要为编辑工作提高效率知道快捷键是必不可少的,设置快捷键单击菜单栏的OptionsKeyAssignments,出现如图三十四对话框,在Command中搜索要设置快捷键的命令操作,找到需要设置快捷键的命令后,点击AssignNewKey后,按下需要设置的快捷按键,当在Keystrokes中看到快捷按键即表示设置成。
建议需要给快捷键的几个功能:
Edit:CommentLines注释
Edit:Un-CommentLines去注释
Navigation:HighlightReferences另一种颜色高亮
View:ClearHighlights去掉高亮
图三十四
六、总结
这里介绍都是非常的基础功能使用,还有其他很多功能没有介绍,如代码差异比较,编译,自定义功能等,这些功能在软件的Help说明书有详细的说明,等到后面有机会,咱再来说说这些进阶功能使用。
另外