版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工具演练Jun2008InternalPage2课程大纲第一部分:SourceInsight使用第二部分:PC-LINT使用第三部分:CCChecker/Quicker/CodeReview使用第四部分:VC的调试方法第五部分:综合实战CCCheckerPage3课程大纲SourceInsightPC-LINTVC调试方法CodeReviewQuickerPage4第一部分:SourceInsight使用Page5SourceInsight工具安装文件路径:\\szxfs08-pub\RND_SOFT_F\Software\1.FreetoInstall\Standard\SourceInsight\V3.5安装文件:本课程作为附件已附带SourceInsight安装Page6SourceInsight介绍SourceInsight是一个支持多种开发语言(Java、C/C++/C#等等)的编辑器和浏览器,由于其查找、定位、彩色显示等功能的强大,在我们的实际工作中得到广泛的应用。Page7SourceInsight工具使用(一):创建工程首先选择主菜单中的“Project”选项的子菜单“NewProject”新建一个项目,此时会弹出一个对话框要求你选择项目组文件存放的路径以及项目文件名(用此testproject文件夹下文件建立工程)。Page8SourceInsight工具使用(一):创建工程选择确认后,将会弹出一个对话框,接受默认选择。如果硬盘空间足够的话,可以将Configuration的第一个复选框选上,该选项将会占用与源代码大致同等的空间来建立一个本地数据库以加快查找的速度。Page9SourceInsight工具使用(一):创建工程选择“OK”按钮,将会有另一个新的对话框弹出,在这个对话框里,可以选择将要编辑、浏览的文件加入工程。一种方式是通过在FileName中输入要阅读源代码文件的名称,点击“Add”按钮将其加入,也可以通过其中“AddAll”和“AddTree”两个按钮可以将选中目录的所有文件加入到工程中,其中“AddAll”选项会提示加入顶层文件和递归加入所有文件两种方式,而“AddTree”相当于“AddAll”选项的递归加入所有文件,可以根据需要使用。推荐使用“AddTree”方式。后续可以通过Project->AddandRemoveProjectFiles增加或者删除工程中的文件。Page10SourceInsight工具使用(一):创建工程正确加入文件以后,Project基本上就建立完成了,此时建议执行SynchronizeFile命令,同时选上“Forceallfilestobere-parsed”复选框,SourceInsight将会为项目中所有文件更新符号信息库。Page11SourceInsight工具使用(二):
LookupReferencesLookupReferences可以说是SourceInsight实际使用中最常用的操作,它广泛地应用在各类查询中。选中某个变量、函数后选择菜单Search>LookupReferences或者使用快捷方式(CTRL+/)或者点击工具栏上的就可以使用这项功能,它可以查询项目中所有源文件,包括注释、采用#ifdef定义的非激活代码。
Options是搜索的选项,包括是否区分大小写,全字匹配,跳过非激活代码,仅仅搜索注释,启动优化匹配,修改匹配文件的修改时间。
SearchMethod包含四种方式:SimpleString(简单字符串),RegularExpression(按照正则表达式的方式查询),KeywordExpression(关键字查询)LookupReference(按照引用关系进行查询,缺省查询方式).Page12SourceInsight工具使用(二):
LookupReferences请在工程中利用SimpleString(简单字符串),RegularExpression(按照正则表达式的方式查询),KeywordExpression(关键字查询)LookupReference(按照引用关系进行查询,缺省查询方式)几种方式查找全部变量MapULFlowCtrl,请注意观察几种查找方式的区别Page13SourceInsight工具使用(三):DocumentOptionsDocumentOptions允许你根据文件扩展名定义它的编辑、显示格式。执行菜单Options>DocumentOption或者在打开的文件中点击右键选择DocumentOptions后,你将看到下图的对话框,你可以通过对话框的AddType,RemoveType新增和删除某类文件格式。因公司编程规范中明确要求不能使用TAB键,通过点中对话框中的Expandtabs自动进行Tab键扩展。(默认使用4空格替换Tab键,只能替换新增的代码,旧代码中可以通过宏替换,后续章节有相关讲解)选中Showrightmargin设置页面宽度标记来查看代码行是否超长。(一般设置未80字符)选中Showlinenumber来在文件中显示文件行号选中Visibletabs来查看代码中是否还存在Tab键Page14SourceInsight工具使用(三):DocumentOptions实际操作:请利用DocumentOption几个选项观察函数correctness1)注意观察文件中是否有Tab键2)空格是如何显示3)选择“ExtandTab”,按下Tab键,在代码中出现的是什么字符4)选择“Showrigthmargn”观察右侧出现什么分隔符Page15SourceInsight工具使用(四):查看函数调用关系在实际应用中,你可以灵活地应用RelationWindow查询函数(包括全局变量,宏定义、结构体等标识符)的调用关系和引用关系,它能帮助你快速地了解整个项目工程的程序结构。Relationwindow可以通过菜单View->RelationWindow或者快捷工具栏中的RelationWindow按钮进行打开/关闭操作。RelationWindow有多种视图方式,可以通过窗口下方的按钮选择。Page16SourceInsight工具使用(四):查看函数调用关系RelationWindow主要包括3种关联类型:Contains:显示出当前标识符的内容,例如结构体变量会显示出它的成员变量.Calls:显示调用关系,常用于参看函数的调用关系,当选中一个函数后,会显示出该函数调用了哪些函数。References:显示引用关系,常用于参看函数的引用关系,当选中一个函数后,会显示出该函数被哪些函数所引用。RelationWindow下面一些常用的工具按钮,这些按钮在实际使用过程中是十分有用的。Page17SourceInsight工具使用(四):查看函数调用关系实际操作:1)请查看函数collect_unmarked都是被哪些函数调用2)请查看函数collect_unmarked都是调用了哪些函数Page18SourceInsight工具使用(四):常用快捷键Shift+F8:高亮显示某一函数或变量F7:在整个工程中匹配关键字F8:在当前文件中匹配关键字CTRL+/:LookupReferencesShift+F9:下一个link标签Alt+,:后退进光标位置Alt+.:前进光标位置F9/F10:整行左/右缩进一个TAB键双击{/}:选中和双击的括号匹配的括号之间的内容Alt+{/}:到达成对的}/{位置Tab:增加4个空格对齐(可选中一段代码Tab对齐)Shift+Tab:减除4个空格对齐,与Tab键相反Alt+Shift+S:同步工程文件Ctrl+F10:最大化/恢复当前窗口Ctrl+O:打开工程文件列表(按ESC则关闭)Page19SourceInsight工具使用小结SourceInsight是一种基于项目工程的应用程序,它将对项目工程中的文件进行分析以后创建一个自身的数据库用于记录项目文件之间的联系,并且能够进行动态的更新。它能显示语法符号(变量、函数、类等等)之间的引用树,类的继承流图,以及调用树,极大地提高了代码的浏览速度;在进行代码的编辑,它会自动地给出非常有用的相关信息。SourceInsight的功能非常丰富,上述提到的仅仅是我们比较常用功能中的一部分,详细的功能使用可以参见《SourceInsight的使用指南.doc》。安装完SI助手之后通过程序->SI助手可以找到该指南。Page20实际操作演练请独立完成下面的操作:1)创建test1工程,加入代码并且同步(testproject前面已经创建)2)请打开工程窗口,查看该工程的所有文件3)请打开文件Driver.c文件3)请快速的打开函数verify_complete4)有个函数名称现在仅记得其中包括XXXmyXXXXgetXXX,请快速找到该函数5)在函数mysound4中,请找到变量soundpd1的定义,看完定义后,还回到原来的函数。大家演练,演练后请一位同学上讲台演示操作Page21第二部分:PC-LINT使用Page22课程目标了解PC-LINT工具的基本概念掌握PC-LINT在SourceInsight中使用方法熟练使用PC-LINT进行检查。Page23PC-LINT是什么?能干什么?(一)(1)PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误,例如:数组下标非法,变量未被初始化,使用空指针,冗余的代码等等,帮助您在动态测试之前发现编码错误,降低消除错误的成本。例如: test.h
#defineSQUARE(a)a*a test.c intx=100; x=SQUARE(x+x);\test.c1Info773:Expression-likemacro'SQUARE'notparenthesized\test.c8Warning665:Unparenthesizedparameter1inmacro'SQUARE'ispassedanexpression\test.c8Warning665:Unparenthesizedparameter1inmacro'SQUARE'ispassedanexpression应该为:#defineSQUARE(a)((a)*(a))Page24PC-LINT是什么?能干什么?(二)(2)PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件,可想而知,它会对我们有很大的帮助(3)PC-lint支持几乎所有流行的编辑环境和编译器,比如BorlandC++从1.x到5.x各个版本、BorlandC++、GCC、VC,VC.net、Sourceinsight、intelC/C++等等,也支持16/32/64的平台环境(4)支持ScottMeyes的名著(EffectiveC++/MoreEffectiveC++)中说描述的各种提高效率和防止错误的方法Page25PC-LINT是什么?能干什么?(三)案例分享:看一个真实的惨痛案例!将案例简单模拟如下:structperson{ char*name; char*address;};voidfunc1(){ structpersonstBob; // free(stB);//由于stBob没有初始化所以stB指向的可能是一个野指针,//释放可能出现各种异常(包括死机等)
//}对于变量没有初始化的情况,PC-LINT工具能检查出来的。公司对PC-LINT明确要求:告警为零Page26PC-LINT的安装安装路径:
\\szxfs08-pub\RND_SOFT_F\Software\1.FreetoInstall\Standard\PC-lintV80安装步骤:与普通应用软件的向导指引安装一样,简单描述一下:(1)给出PC-Lint的安装路径和选择设置的保存文件。(2)选择你所使用的C/C++编译器:比如VisualC++6.x/UnixC/C++等。(3)选择内存模式:比如32bitFlatModel。(4)选择所使用的库:比如MFC,OWL,等,可多选,在windows下开发的一般要选中windows32bit。(5)C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开:比如ScottMeyers,可不选。(6)头文件的设置:可在后面步骤中手工添加。(7)详细的PCLINT参考手册在安装目录下:C:\lint\pc-lint.pdf。上述安装配置可以不用关心,各产品都会根据自己的开发环境发布标准的配置。可能连PC-LINT都不用安装,直接拷贝产品的标准Lint目录就可以使用了!Page27PC-LINT整合到编辑环境中使用(一)以SourceInsight为例介绍整合过程1、请直接拷贝文件夹“免安装版软件”中的整个“Lint”文件夹到C盘根目录2、在option.lnt文件中添加工程头文件路径,打开option.lnt有详细的解释3、打开sourceinsight->options->Custonmcommand,按照下面要求配置:Run:C:\LINT\LINT-NT.EXEoption.lnt%fDir:C:\LINTPattern:^\([a-zA-Z].*\)(\([0-9][0-9]*\)).*Page28PC-LINT整合到编辑环境中使用(二)4、打开Options->MenuAssignments,设置快捷键Page29课程大纲PC-LINT概述PC-LINT安装和配置PC-LINT详解PC-LINT小实践小结Page30PC-LINT发现问题的机理(1)检查源文件及其访问的资源,对可能存在问题的代码行显示告警信息,由于错误会多种多样,PC-LINT对告警进行了分类。(2)首先按照严重程度分为Error、Warning、Info等几个级别。(3)然后在每一级又根据错误类型设置了很多告警编号。这些告警号的含义都可以在安装目录的msg.txt中找到。注意:虽然分级别,但是并不是所有info告警的严重程度就一定低于warning!Page31PC-LINT告警分类错误分类CC++SyntaxErrors1-1991001-1199InternalErrors200-299FatalErrors300-399Warnings400-6991400-1699Informational700-8991700-1899ElectiveNotes900-9991900-1999Page32PC-LINT告警详解(一)第一类(错误及极可能导致出错处)1、错误1-199
明令禁止的2、未初始化
530: 变量未初始化
644-645: 变量可能没有初始化
727-729: 变量未明确初始化3、返回值
533: 函数需要(不需要)返回值4、比较:
568,775: 无符号数永远不会小于0 650: 常量超过比较对象所能表示的范围5、声明
578: 局部变量和全局变量定义冲突Page33PC-LINT告警详解(二)第二类(可能的错误,需判断程序逻辑)1、布尔值
774: Booleanwithin‘String’alwaysevaluatesto[True/False]2、精度损失
569: 丢失信息,常量赋值
734: 丢失精度,变量之间传递值
732,570: 丢失符号
571: 可疑的强制类型转换?
616: switch…case…语句缺少break3、返回值
534: 忽略返回值4、边界值
661: 访问边界以外的指针,
662: 对指针进行操作时,使得指针的范围超过有效范围5、空指针
413: 对空指针进行操作,比如*,++,--操作
613: 与413类似
668: 将空指针传递给函数Page34PC-LINT告警详解(三)6、switch语句
744: switch…case语句没有default语句使用
787: switch…case语句中使用枚举类型,但是有一个值没有出现在case中7、未用的代码和变量
527: 代码不可达,也就是冗余代码
528: 静态变量或静态函数只声明但没有定义
529: 变量进行了定义,但是后续没有使用
715: 参数未被使用,函数定义了一个参数,但是函数中没有使用
550: 局部变量没有被使用
551: 静态变量没有被使用
552: 外部变量没有被使用8、赋值
522: 语句仅仅包含一个表达式,没有产生任何的结果可能有遗漏
9、参数
515: 参数个数不匹配,函数定义的参数和调用时不符
516: 参数类型不匹配Page35课程大纲PC-LINT概述PC-LINT安装和配置PC-LINT详解PC-LINT小实践小结Page36PC-LINT小实践1、前置条件:已经安装和配置了PC-LINT,并将它整合到SourceInsight中,菜单中的PCLINT_Current功能项也已经关联了PC-LINT命令。2、待PC-LINT的文件:3、先使用PC-LINT工具检查错误,再看看如何将这些错误消除。大家演练,演练后请一位同学上讲台演示操作Page37课程大纲PC-LINT概述PC-LINT安装和配置PC-LINT详解PC-LINT小实践小结Page38课程小结小结1:PC-LINT工具可以在代码编辑阶段发现各种语法错误或者合乎语法的潜在错误,提高代码的质量,降低排查错误的成本。小结2:PC-LINT工具可以和各种编辑器整合使用,进行可视化的、批量的检查。小结3:PC-LINT仅仅是检查出可能存在的隐患,代码是否有问题?如何处理问题?需要人工具体问题具体分析,不能盲目的追求零告警。Page39第三部分:CCChecker/Quicker/CodeReview使用Page40圈复杂度工具--CCChecker功能介绍CCChecker是圈复杂度度量工具,用以及时发现代码中最复杂的地方。CCChecker极大的方便了开发人员在开发中随时检查代码圈复杂度的情况。CCChecker工具包括了三个度量功能:版本圈复杂度比对功能;单个文件圈复杂度度量功能;单个函数圈复杂度度量功能。Page41圈复杂度工具—CCChecker的安装1、安装CCChecker.安装:双击安装包,采用默认安装方式安装。本课程附带了安装包,如果因C盘权限问题可直接拷贝本课程安装后的文件:直接拷贝“免安装版软件”文件夹中的“CCChecker”文件夹到C盘根目录2、配置在开始菜单中选择Programe->CCChecker->Help->ConfigGuide,即可打开文档,按照文档说明进行CCChecker在sourceinsight中的集成。直接拷贝时请参见:圈复杂度工具手工配置方法Page42圈复杂度工具--CCChecker使用对单文件执行检查结果:对单函数执行检查结果:Page43附:圈复杂度工具手工配置方法定制CCChecker命令:Options->CustomCommands相关的参数输入:Run:C:\CCChecker\CCMainCheck.exe%fDir:C:\CCCheckerPattern:^\([a-zA-Z].*\)(\([0-9][0-9]*\)).*Page44公司要求1、新增函数的圈复杂度最大不大于15,对于圈复杂度大于15的代码,需经过分析确认为良性设计。产品线软件工程部可为分析提供仲裁或技术支持。2、对于老代码的修改要求为:圈复杂度大于15的老代码,修改后的圈复杂度不能大于修改以前的;圈复杂度不大于15的老代码,修改后的圈复杂度也不大于15。3、版本转测试时,由开发负责人提供新增函数的圈复杂度和版本平均圈复杂度的度量报告。Page45实际应用演练主要演练以下内容:使用CCChecker对前面已建立的工程演练用的代码进行检查。大家演练,演练后请一位同学上讲台演示操作Page46Quicker的基本功能介绍标准C语言扩展标准说明生成代码修改注释其它常用的宏Page47安装SI助手直接安装--SI助手1.4b.如果遇到C盘权限问题,则:直接拷贝“免安装版软件”文件夹中的“SI助手”文件夹到C盘根目录。Page48Quicker工具集成到SouceInsight中1、把宏加入到BASE工程:选取“sourceinsight->
Project->OpenProject”,打开默认的Base工程,利用“sourceinsight->
Project->AddandRemoveProjectFiles”,把“C:\SI助手\backup”中的文件:quicker.em加入到工程,然后,
利用“Project->SynchronizeFiles”进行同步
。2、设置快捷键sourceinsight->
options->MenuAssignments…把宏“AutoExpand”加到菜单中并设置快捷键Page49Quicker的基本功能(一):标准C语言扩展./*
--自动生成/**/,如果出现换行,工具会自动对齐.{
--自动生成{}.while(wh)--自动生成While语句.if--自动生成if语句(ife,ifs生成对应格式的if语句).for
--自动生成for语句.fo
--自动生成for语句,增加了自动定义循环变量功能.do
--自动生成dowhile语句.#ifd--自动生成#ifdef命令.#ifn--自动生成#ifndef命令.#if--自动生成#if命令.cpp
--自动生成适用于c++的c原型说明定义.switch(sw)
--自动生成switch语句,可以通过拷贝case值自动生成.case(ca)--自动生成case语句,用于增加switch中一个分支.struct(st)--自动生成结构类型定义.enum(en)--自动生成枚举类型Page50Quicker的基本功能(二):标准说明生成.config(co)--配置用户名和标题的说明语种。用户名就是前面自动生成的作者,修改者的名字,语种,就是前面提到的文件头说明和函数头说明所
采用的的语言有中文和英文两种选择
.file(fi)--生成标准的文件头。它能自动取得文件名,作者名,时间
,以及函数列表,而且在生成的过程中会主动弹出功能描述能的内容输入
对话框(提示对话框只能输入256个字符),输入的内容能够自动换行对齐.func(fu)--生成标准的函数头说明。该函数必须在该函数的前一行执
行,它能自动取得函数名,能够自动取得函数的输入、输出参数,并且排
列好,同时生成日期和作者。能够提示输入功能描述,输入的内容能够自
动换行对齐。.hi
--增加修改历史列表。自动在该行增加修改历史列表,用
于文件头和函数头说明中的历史记录更新。.hd--自动生成函数头文件。该命令能够自动生成但前C文件的
头文件定义,包括常用的宏定义,还有全部的函数原型定义。.Hdn--生成新的有文件。该命令能够自动生成指定的的头文件定
义,包括常用的宏定义,提示输入函数原型的类型。Page51Quicker的基本功能(三):代码修改注释.pn
--添加问题单号,工具会记下单号,后续需要的地方自动使用.ap--添加问题单修改说明。其中输入的问题单号具有pn功能.ab
--添加问题修改(增加代码)开始说明。问题单号使用之前pn或者ap设定的.ae
--添加问题修改(增加代码)结束说明。和ab对应.abg--添加问题修改(增加代码)开始和结束说明。一次性完成ab和ae的功能.db--添加问题修改(删除代码)开始说明。问题单号使用之前pn或者ap设定的.de
--添加问题修改(删除代码)结束说明。和db对应.dbg
--添加问题修改(删除代码)开始和结束说明。一次性完成db和de的功能.mb--添加问题修改(修改代码)开始说明。问题单号使用之前pn或者ap设定的.me
--添加问题修改(修改代码)结束说明。和mb对应.mbg--添加问题修改(修改代码)开始和结束说明。一次性完成mb和me的功能Page52Quicker的基本功能(四):其它常用的宏下面的宏需要通过设置快捷键或者菜单来完成的:.ComentCPPtoC
:将从C++的//注释改为标准的C/**/注释。
可以一次选中多行同时修改.ReplaceBufTab
:替换当前文件中的所有Tab键.ReplaceTabInProj
:替换所有工程文件中的Tab键.InsertFuncName
:
插入当前的函数名。会将函数名插入到光标处.InsertTraceInfo
:
在函数的出、入口首尾加入打印代码.AutoInsertTraceInfoInBuf
:在当前文件的函数出入口加入打印信息.AutoInsertTraceInfoInPrj
:在当前工程的函数出入口加入打印信息.RemoveTraceInfo
:删除InsertTraceInfo()添加的打印信息.RemoveCurBufTraceInfo
:删除文件中InsertTraceInfo()添加的打印信息.RemovePrjTraceInfo
:删除工程中InsertTraceInfo()添加的打印信息.FormatLine
:自动格式当前行。自动完成超长行的换行以及对齐.UpdateFunctionList
:能够自动在光标所在行重新生成函数列表.Review_Add_Comment
:增加检视记录。这个有专门的CodeReview工具。.DelCompoundStatement
:复合语句删除。其它还存在大量的宏:可以在SourceInsight中Options->KeyAssignments弹出的对话框Command项输入Macro看下面列出的所有宏Page53学员新建一个.c,熟练执行下面的功能:/*--自动生成/**/,如果出现换行,工具会自动对齐.{--自动生成{}.while(wh)--自动生成While语句.if--自动生成if语句。(ife,ifs生成对应格式的if语句).for--自动生成for语句.switch(sw)--自动生成switch语句,可以通过拷贝case值自动生成.case(ca)--自动生成case语句,用于增加switch中一个分支.struct(st)--自动生成结构类型定义.enum(en)--自动生成枚举类型.func(fu)--生成标准的函数头说明。该函数必须在该函数的前一行执行,它能自动取得函数名,能够自动取得函数的输入、输出参数,并且排列好,同时生成日期和作者。能够提示输入功能描述,输入的内容能够自动换行对齐。.hi--增加修改历史列表。自动在该行增加修改历史列表,用于文件头和函数头说明中的历史记录更新。
Quicker的实战练习大家演练,演练后请一位同学上讲台演示操作Page54功能小结本章节主要讲解了Quicker工具中经常用到的宏,包括C语言常用命令的自动生成,标准说明的自动生成,修改问题单注释的自动生成,其它扩展功能的宏。通过使用这些功能,可以提高编码的效率,提高代码的质量。减少编码过程中的人为差错。SourceInsight的宏的功能非常强大,宏的功能主要在我们的.em文件中实现,当大家非常熟悉了.em文件的语法之后,还可以直接编写新的.em文件或者修改现有的文件来满足特定的需求。如果有新的.em文件,只需要将文件加入到Base工程中就可以在其它工程中直接使用了(不同版本的SourceInsight可能会有小的差异)。Page55CodeReview功能介绍CodeReview工具是用来在代码检视时,记录发现的缺陷或疑问。主要具有以下的特点:工具用于记录代码检视意见,可以输入检视意见描述,意见级别。工具将自动记录检视意见的位置以及检视者(检视者通过config配置)工具生成的记录文件是一个txt文件,该文件可以在工程中自动恢复,方便作者找到检视意见的具体位置工具生成的记录可以直接导入到公司预审表单模板中,对于代码检视非常方便工具还可以进行检视意见汇总。该工具必须同sourceinsight3.0(及以上)结合使用。该工具在安装完SI助手之后已经自动安装。也可以通过把文件CodeReview.em加入到baseproject实现手动安装。Page56CodeReview工具使用(一):工具集成在SI菜单中加入宏命令:选取"Options->MenuAssignment",并加入"Review_Add_Comment"到菜单edit下。也可以分配一个热键给该命令,比如Ctrl+Alt+A(可通过图中的Keys按钮打开热键设置窗口)按上面的方法,将宏"Macro:Review_Restore_Link"和"Macro:Review_Summary"加入到菜单中。Page57在菜单中加入选取“Review_Add_Comment”,则会弹出如下对话框提示输入检视意见的级别,主要有High,Medium,Low,Doc。(需要注意的是Low对应的是检视意见表单中的Suggestion)输入级别之后,会弹出如下对话框提示输入问题描述:输入描述之后工具自动生成如下的一条检视意见:FileName:\src\H248Stub.cLine:103Reviewer:zhangsanSymbol:MS_SetDynaEntitySeverity:MediumStatus:OpenComments:代码存在缺陷CodeReview工具使用(二):AddCommentPage58RestoreLink功能非常简单,只需要将通过CodeReview工具生成的.txt文件在工程中打开,然后执行RestoreLink即可。成功后在检视意见的左侧会出现到文件内容的链接按钮。需要注意生成检视意见的的工程代码必须和恢复链接的工程代码一致,否则会导致恢复错误。CodeReview工具使用(三):RestoreLinkPage59学员在前面练习的代码上练习添加review意见和正反向链接。CodeReview工具演练大家演练,演练后请一位同学上讲台演示操作Page60第四部分:VC的调试方法Page61课程目标了解调试的常用功能熟练掌握调试的使用方法Page62调试基本功能介绍Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处.这时如果选择StepOver(F10)就可以逐步执行main()函数了.StopDebugging(Shift+F5):此debugger功能将终止(所有)调试,并返回到常规编辑状态.Break(此功能常常在遇到调用函数的语句时可见.):此功能将在调试过程中的debugger当前位置挂起程序的执行,然后就可以在调试状态一修改程序的代码,接着可以用ApplyCodeChanges(Alt+F10)来应用修改的代码到正在调试的程序当中.如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入.ApplyCodeChanges(Alt+F10):此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码.如,选择Break功能并修改代码后,只要选择ApplyCodeChanges(Alt+F10)就能将修改后的代码应用到正在调试的程序当中.Go(F5):此功能将全速执行程序直到遇到一个断点或程序结束,或直到程序暂停等待用户输入.
注意,此功能最能有效的调试循环,常将断点设置在循环体内,重复的按F5全速执行循环体可以测试循环过程中的产生的变化.Insert/RemoveBreakpoint(F9):设置断点。Page63StepInto(F11):此功能可以单步进入到在调试过程中所跟踪的调用函数的语句的函数内部.如,当前语句是"d.Display()",选择StepInto(F11)后,Debugger将进入Display()函数内部并停在Display()函数内部的第一条语句上.(此时,就可以StepOver(F10)对Display()函数进行单步调试了.)StepOver(F10):此功能可以单步对所在函数单步调试,如果调试的语句是一个调用函数的语句时,StepOut(Shift+F11):此功能将使Debugger切换回全速执行到被调用函数结束,并停在该函数调用语句的下一条语句上.当确定所调用的函数没有问题时可以用这个功能全速执行被调用函数.RuntoCursor(Ctrl+F10):此功能将全速执行到包含插入点光标所在的行,可以作为在插入点光标处设置常规断点的一种选择.注意,当光标处不是一个有效的执行语句时此功能将不起作用.调试基本功能介绍ShowNextStatement(Alt+Num*):此功能将显示程序代码的下一条语句,如果源代码中找不到,则在Disassembly窗口中显示语句.Page64Variables:显示所有当前执行上下文中可见的变量的值。特别是当前指令涉及的变量,以红色显示。Registers:Debug:显示当前的所有寄存器的值。Memory:由于指针指向的数组,Watch只能显示第一个元素的值。为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。在Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。CallStack:显示函数的调用栈。调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的。单击Debug工具条上的Callstack就显示CallStack对话框。在CallStack对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。单击这些函数名可以跳到对应的函数中去。
调试基本功能介绍Watch:V
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026重庆沙坪坝区总工会招聘1人考试备考题库及答案解析
- 2026年广安职业技术学院单招职业适应性测试题库有答案详细解析
- 2026云南民族博物馆(云南民族文化宫)招聘2人笔试模拟试题及答案解析
- 2026浙江宁波市余姚市供销联社下属企业招聘8人笔试备考题库及答案解析
- 2026中国能源建设集团黑龙江省电力设计院有限公司校园招聘笔试模拟试题及答案解析
- 2026广东南山二外(集团)海德学校招聘教师2人考试备考题库及答案解析
- 2026广西柳州柳城县龙头镇卫生院招聘中药士岗位1人笔试备考题库及答案解析
- 2026年四川省三台县初三下学期期末调研测试语文试题文试卷含解析
- 广东省佛山顺德区五校联考2026年初三第一次联合调研考试语文试题含解析
- 2026年黑龙江省大庆市肇源市级名校初三考前抢分(三)英语试题含解析
- 物流交付环节管理办法
- 2025年消防党组织谈心谈话记录范文
- 基于PLC的立体仓库堆垛机智能控制系统设计
- 五小活动成果汇报
- DB61∕T 1916-2024 土石山区土地整治技术规程
- 2025年【大型双选会】中国恩菲工程技术有限公司春季校园招聘30人笔试历年参考题库附带答案详解
- 《互联网营销师(直播销售员)五级(初级)理论知识考核要素细目表》
- 内衣店新员工入职培训
- 电网检修培训课件下载
- 电器元件销售管理制度
- 三种方法评标计算(自带公式)
评论
0/150
提交评论