调测工具VcTester攻略--使用快捷编辑功能

调测工具VcTester攻略之

使用快捷编辑功能

作者:网际游民,成稿于20101

 

关于本系列文章

本系列文章罗列如下:

《调测工具VcTester攻略之:搭建敏捷开发环境》

《调测工具VcTester攻略之:使用快捷编辑功能》

《调测工具VcTester攻略之:快速定位问题》

《调测工具VcTester攻略之:敏捷开发方式下调测组织过程》

《调测工具VcTester攻略之:脚本驱动API测试》

《调测工具VcTester攻略之:使用脚本桩构造数据驱动测试》

撰写本系列文章时得到ezTester技术专家Sundy多次帮助,在此谨表感谢!

 

跳转功能

本文介绍VcTester IDE环境的编辑功能,与绝大多数IDE开发环境类似,VcTester也提供诸如工程化管理、多文档编辑器、语法高亮显示、查找、替换等功能。本文着重介绍VcTester编辑器的特色功能,一般功能略去不讲。

VcTester的跳转做得比较有特色,非常符合开发人员的使用习惯,下面扼要举例常用的几项跳转功能,《VcSmith使用手册》基础篇中第4章有更详细介绍。

日常编码时,可将IDE界面置为上图状态,左侧显示当前C/C++文件中的符号定义,右上方显示当前函数的调用树,当前函数的调用者及被当前函数调用的子函数都直观显示出来。用鼠标双击左侧符号中相关函数节点,右侧就自动跳转到该函数的定义位置。

编辑源码过程中,将编辑光标移到某个函数名之上,再按“Alt + 上移键”,编辑光标随即跳转到指定函数的定义位置,若按“Alt + 左移键”就跳转回来,接光标挪到某个单词上,再按“Alt + 下移键”,系统即自动在全工程范围查找指定的单词,查找结果在Search列表中列出,如下图是快速查询“compare”函数都在工程中哪些地方调用了。

 

再次强调一下这3项快捷操作:Alt+上移键、Alt+右移键、Alt+下移键,如果使用VcTester集成环境不会这3个操作,证明你还远没理解VcTester的特色,为什么这样说,后面提到编辑器风格时我们再讲。

将编辑光标挪到某个函数的任意空白位置(前后不挨着字符即可),然后按“Alt + 上移键”,光标随即跳转到该函数首部,再按“Alt + 左移键”跳转回来。这个热键也比较常用,编程中,我们常查阅当前函数原型,或查阅在函数首部申明的变量名称或类型,快速看一下马上跳回来。将编辑光标挪到“)”或“]”或“}”之后,再按“Alt + 上移键”,编辑光标立即跳到其前与之匹配的“(”或“[”或“{”字符位置,同样,如果在“(”或“[”或“{”字符之后按“Alt + 上移键”则自动跳转到其后与之匹配的“)”或“]”或“}”字符位置。

 

几个不能不掌握的热键

编码是持久的、机械的、天天重复的工作,熟练的工程师编程时很少用鼠标,而尽可能多用热键,除了上面介绍的快捷键,在VcTesterIDE界面,如下几个热键也非常有用:

1.         选中CSE脚本执行,编写一段CSE调测脚本,用“Ctrl + A”热键自动选中当前定义体,按“Ctrl + E”执行选中的文本,如果连接两次“Ctrl + A”则选中当前全部文本。不多说了,这一项是VcTester最最最基本的操作,如果不会,意味着日常编程中你将丧失10%的工作效率。

2.         片断代码生成,比如键入“if”后按“Ctrl + J”热键生成如下代码:

if ()
{
}

键入“ife”后按“Ctrl + J”生成:

if ()
{
}
else
{
}

键入“ifei”后按“Ctrl + J”生成:

if ()
{
}
else if ()
{
}

上面举例3if/else的代码片断生成,你可以打开安装目录的CseWinC.dci文件了解更多的生成规则。当然你还可以添加自己的规则,我本人就添加了一条规则,生成“if (orOK != OpResult) { ... }”,因为这句判断程序中到处用,纳入“片断代码生成”后就省事多了。

3.         选中一段代码,按“Ctrl + I”热键将当前代码缩进一个TAB位置,如果按“Ctrl + U”热键,去缩进一个TAB位置。

4.         选中一段代码后,按“Ctrl + M”热键自动注释这段代码,若再按一次,取消注释。

5.         设置标签,将编辑光标挪到某一行,按“Ctrl + Shift + 1”设置1号标签(重复一次刚才操作取消标签),然后在本源文件其它任意位置按“Ctrl + 1”就跳转到刚才设定的标签位置,按“Alt + 左移键”跳回。VcTester支持从0910个标签热键,这意味着每个源文件你最多可设置10个快捷位置,够用了,多了也记不住哪个对应哪位置。根据本人使用经验,我建议给若干标签赋予特定含义,比如,按“Ctrl + 0”跳到当前工作位置,按“Ctrl + 9”跳到全局数据初始化位置,这样,工作起来更加清晰有序。

6.         前向跳转按“Alt + 右移键”,与之相对应的是后向跳转“Alt + 左移键”。

7.         按“Ctrl + .”热键可召唤全局的提示输入,此项在编写CSE脚本时比较有用,尤其在你记不确切某个CSEAPI时。编辑C/C++代码因为有步随提示,这个热键倒是用得不多。

以上选择重要的简单作介绍,其它的如查找、替换等,与多数编辑器相同,不多说了,更多热键请自行参考VcSmithVcTester手册。

 

随时知道你现在到哪儿了

针对C/C++项目,在实施敏捷开发前后工作方式会有不少变化,其中之一是你更关注编程步骤分解了,因为每一次迭代都要求你的工作产出是可验证的、易验证的,这样,测试才可能随时跟进。未实施敏捷之前,功能开发是一锅烩,哪管先做什么后做什么,一股脑把代码写完了再合起来跑。

此项变化引发一个需求,随时随地你都很清楚接下来要做什么?已完成的、刚完成的是什么?接下来做什么?即,前次迭代、当次迭代、下次迭代都是清晰的,在这一风格之下,你接触代码行应比以往更清楚的知道它所处的位置,知道前因后果,明了上下文关联关系。

借助VcTester集成环境,我们把相关功能再强化一下,在符号导航树弹出右键菜单,将如下图的“Show Macro”选项置上,让宏定义也显示在符号树中。

之后我们在源码中添加如下宏开关:

#ifdef USING_MACRO_SPLIT
#define ___CONFIG_SYS___
#endif

界面显示如下:

 

大家猜出我想说什么了吗?上面定义___CONFIG_SYS___宏只用作分隔标记,在左侧符号树中将一堆函数列表分隔开来,让你更清晰知道你当前工作在哪个模块的哪段功能实现上。

“功能段”也是采用敏捷开发模式后大家会自然而然形成的工作风格,敏捷开发是由一段一段可应用、可展示的功能开发驱动着前进,划分C/C++模块(指*.c*.cpp文件)时更多由应用来主导,而非事先设计(高层设计、低层设计等)为主导,两者思路很不相同,前者模块间耦合将大幅降低,extern申明会少用,由OBJ链接的符号许多要改用注册回调方式,另外还经常编写大模块,一个模块会集中定义多个class类定义。而后者,非敏捷方式,以事先设计为主导,以设计的眼光看待一切,通常一个CPP文件就定义一个class类。总而言之,在敏捷开发模式下,模块独立性要更强一些,有点像java包,import进来就能用,一个包就代表一种独立应用。(引伸一句,成功的敏捷开发实践集中于javaC#领域,与这两门语言的组织特点有关,C/C++敏捷实践想获得成功,编程风格也得向那边靠)。

了解敏捷开发经常要与大模块打交道后,应能理解使用上述分隔标记的必要性了吧?另外,如上图,编写每一行代码,当前函数都被谁调用(即caller),当前函数又调用哪些子函数(即callee),都在(源码上方的)函数调用树上显示,你随时清楚当前工作到哪儿了。这时,如果想看看caller函数的代码是怎么写的,按住Ctrl再用鼠标双击caller函数,源码就跳过去了,看完后,按“Alt + 左移键”跳回。

 

有关编辑器风格

尽管编辑器功能有强弱、易用不易用之分,但网上大家争论哪个编辑器好用,哪个不好用,经常陷于个人喜好,用惯了就说好,用不习惯就一顿板砖。本文不评价常见C语言编辑器的好坏,而尝试从应用风格上作比较,也会渗杂一点个人好恶的主观想法,但尽量公正的去评述,请大家看完之后再考虑是否要补上一砖(手下留情喔J )。

风格之一,显眼一点,还是整洁一点?且看下面SourceInsight编辑器例子。

 

有多种字体,颜色斑驳陆离,又是下划线,又是斜体、粗体,字号大小不一,场面很丰富,够显眼吧?当然,也可以用一字概括:乱!乱是主观受,是相对的,如果你习惯Delphi编辑器,肯定受不了上面风格,VcTesterDelphi风格一致,源码只一种字体,大小一种字号,各行高度统一。如果你习惯SourceInsight,可能会抱怨在VcTester编辑器找特定标识不够直接,如上图括号嵌套关系,一眼看得真真切切。

风格之二,是否受控?在多数源码编辑器中,编辑光标不能落在不存在字符的位置,上下移动编辑焦点时,光标会左右跳跃,而在VcTester编辑器,光标可在行尾任意位置停放,上下移动编辑焦点,光标将垂直移动,用鼠标点行尾任意位置光标也直接挪到指定位置。在VC编辑器中,键入“{”或“}”,编辑器自动帮你调整缩进位置,键入单词后加冒号,编辑器自动把它调整到行首,VcTester没这些自动调整功能。整体而言,VcTester追随Delphi编辑器风格:简洁,让你自主控制所有输入。

风格之三,Microsoft风格还是Borland风格?网上已有人对这两种风格作过总结,Microsoft风格是随意设计,但提供强大二次定制功能,Borland风格是精心设计,但自由定制与扩展能力较弱。比如VC的调试热键:F5运行,F9设断点,F10单步,F11跟入,DelphiF5设断点,F8单步,F7跟入,F9运行。多数键盘按下图方式布置功能键:

4个功能键为1组,每组两边的功能键可直接指法定位。调试时,单步与跟入使用次数最多,不妨想象一下,闭上眼睛(即盲打)按F10F11方便还是按F8F7方便,设断点尽管常用,但远没单步与跟入用得多,VC却把设断点放在指法直接定位的地方,而单步F10却放在要眼睛看着才按得准的位置。再如,定义跳转与回跳,最方便的仍是Alt加方向键,浏览代码时,左手处在CtrlAlt键附近位置,右手处在方向键与上下翻页键附近,这时上下移一行、翻一页,或者翻到首行或未行都很方便,但VC用“Ctrl+加号键”与“Ctrl+减号键”进行前向与后向跳转,很不容易定位,如果有小数字键盘,用数字键盘上的“+”与“-”键,情况稍好些,但如果,你用的是笔记本电脑呢,很难相信有谁眼睛不扫一下就能按准这两个热键。上面我们仅简单举两个例子,VC缺省的热键不少很难用,欠思量,好在它的定制功能很强,不方便的话你可以重新定义。

总结一下,VcTester编辑器的热键设置比较合理,主体风格是:简单、便捷、自主、严谨,这正是一个老程序员愿意接受的,像SourceInsight那种乱乱的东西,可能更适合搞艺术创作的人使用。

 

如何让VcTester编辑器表现更优

按下面建议使用VcTester编辑器,其品质表现更佳:

1.         定义全局符号后保存一下

VcTester在保存源码时,会更新本模块符号定义,比如你新定义一个全局变量或函数,保存后该变量或函数就会出现在提示输入列表中。

2.         经常编译

在敏捷开发方式下这不成问题,在传统方式下,经常编译也有好处,不妨多做,对VcTester编辑器将带来额外好处,编译一次,PDB文件得到更新,VcTester自动从中提取最新符号信息,提供输入、函数调用图等更准确、也更全面。

3.         原型先行

在敏捷开发方式下,要求实现某功能之前,将若干待实现函数的原型先写出来,编译先通过。原型先行,包括函数原型以及涉及的相关数据类型要先定义,编译后,相关类型信息,函数原型信息等经VcTester提取,能动态提示给用户,编写代码会更加顺手。

4.         必要时手工定义storage指示,VcSmith手册附3有介绍

本人有过切身体验,我们的项目主体用VC做开发,少量涉及C51编程,C51的编辑器功能不强,现在我们希望把C51源码也挪到VcTester集成环境中编辑。

大家知道,在Keil语言中xdata是一个关键字,比如:

byte xdata MsgNum;

这一句定义了一个类型为byte的变量MsgNumVcTester编辑器不知道xdata是什么,所以无法识别这个变量定义。根据VcSmith手册指示的步骤,把xdata作为storage指示添加到配置文件,重起界面程序后,上面变量定义就能正常识别了。

 

相关文章:

 

《调测工具VcTester攻略--搭建敏捷开发环境》

《调测工具VcTester攻略--使用快捷编辑功能》

《调测工具VcTester攻略--快速定位问题》

《调测工具VcTester攻略--敏捷开发方式下调测组织过程》

《调测工具VcTester攻略--脚本驱动API测试》

    《调测工具VcTester攻略--使用脚本桩构造数据驱动测试》

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值