下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 VC++&&MSDN的使用

VC++&&MSDN的使用.ppt

VC++&&MSDN的使用

lanhaijinx
2012-07-07 0人阅读 举报 0 0 暂无简介

简介:本文档为《VC++&&MSDN的使用ppt》,可适用于IT/计算机领域

VCMSDN的使用VCMSDN的使用目的与目标目的与目标学习使用MSDN学习使用VC调试工具解决常见的编译错误环境参数的设置课程概述课程概述MSDNVC调试器常见编译错误VC快捷键VC项目文件说明环境参数的设置MSDN的使用方法MSDN的使用方法使用上下文关联帮助按下F键可从MSDN库中得到上下文相关帮助。你选择一个基于当前窗口和光标位置的主题同时你将看到包含上下文相关帮助的MSDN可视窗口。如果在编辑源文件时按下F键系统可提供光标处单词的帮助信息。如果可能的帮助主题超过一个屏幕上出现一系列可选项。MSDN的使用方法MSDN的使用方法使用关键字搜索帮助单击MSDN观察器中的Search标签即可搜索MSDN的关键字列表。此Search标签允许输入查询来查找主题用户可以使用查询搜索库的全部内容、部分内容和最后查询结果。当限制搜索范围时可使用最后一个选项。用户可以利用查询来搜索整个MSDN库的内容或只搜索每个主题的标题。查询过程十分简单如搜索一个单词也可以查询一组同义词。使用AND、OR、NEAR和NOT操作符可创建查询。虽然大写便于区分搜索条目和运算符的差别但这些运算符不需要大写。例如要查找与单词dialog和tab相关的所有主题可使用以下查询代码:dialogNEARtab要查找main但不包含winmain的主题可使用以下查询代码:mainNOTWinMain。MSDN的使用方法MSDN的使用方法浏览目录窗口使用MSDN库的第三种方法是浏览Contents标签下的目录列表。目录窗口显示每个已有主题的标题均按易于使用的树形视图排列。当MSDN库目录树完全叠放时目录窗口中显示的是已有主题的顶层标题。顶层标题与一系列书的题目一样其图标非常像一本书。当树形图标关闭时在树形图标的旁边有一个加号()表明可以打开此图标显示下一层目录。单击加号()可打开树形图标并展开目录树显示已打开书的目录。看上去很多页面的图标代表书的主题要显示选中的标题可单击该主题图标此时MSDN库主题窗口打开。常见编译错误常见编译错误Fatal Error Cunexpected end of file while looking for precompiled header directive这一般是由于使用了参数Yu“stdafxh”意思是在每个文件中都应该使用#include来包含这个头文件。一般改正就是在每个CPP文件中包含这个文件就可以。Error Cundeclaredidentifier调用的方法或变量没有定义。warningClocalvariable‘p’usedwithouthavingbeeninitialized使用的变量未经初始化。LNKunresolvedexternalsymbol“symbol”(不确定的外部“符号”)。如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签将产生此错误消息。一般来说发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误其次可能使用了不同版本的连接库。VC调试器VC调试器设计及编码之后随之而来的便是调试它是软件开发的第步。你的行程序可能在编译时一个警告也没有但却经常死机或者更糟的是只偶尔地死机在你的程序无法正确工作而你又无法确定为什么的时候就要求助于调试器让它在程序运行时看一下程序的内部情况。但调试通常情况下更多的是一门艺术而不是科学它要求有清醒的头脑和敏锐的洞察力。调试器就像一个放大器它可以扩大你的视野但只有你了解往哪儿看时才有用。VC调试器VC调试器调试环境的建立在VC中每当建立一个工程(Project)时,VC都会自动建立两个版本Release版本,和Debug版本。Release版本是当程序完成后,准备发行时用来编译的版本而Debug版本是用在开发过程中进行调试时所用的版本。Debug版本当中包含着Microsoft格式的调试信息不进行任何代码优化而在Release版本对可执行程序的二进制代码进行了优化其中不包含任何的调试信息。在新建立的工程中你所看到是Debug版本若要选择Release版本可以选择菜单Project中的Setting命令这时屏幕上面弹出ProjectSetting对话框在SettingFor下拉列表中选择Release。VC调试器VC调试器如何设置断点在VC中你可以设置多种类型的断点我们可以根据断点起作用的方式把这些断点分为三类:、与位置有关的断点、与逻辑条件有关的断点、与WINDOWS消息有关的断点下面我们分别介绍这三类断点。VC调试器VC调试器与位置有关的断点一般位置断点将光标移到你要设断点的位置当然这一行必须包含一条有效语句的然后按工具条上的addremovebreakpoint按钮或按快捷键F这时你将会在屏幕上看到在这一行的左边出现一个红色的圆点表示这儿设立了一个断点。VC调试器VC调试器与位置有关的逻辑断点有的时候你可能并不需要程序每次运行到这儿都停下来而是在满足一定条件的情况下才停下来这时你就需要设置一种与位置有关的逻辑断点。要设置这种断点我们只需要选中Breakpoint对话框中的Location标签在Location页面中单击Condition按钮在Expression编辑框中写出你的逻辑表达式如X>=或ab>,最后按OK返回。这种断点主要是由其位置发生作用的但也结合了逻辑条件使之更灵活。VC调试器VC调试器有时我们需要更深入地调试程序我们需要进入程序的汇编代码因此我们需要在在汇编代码上设立断点:要设立这种断点我们只需选择DebugWindow中的Disassembly子命令这时汇编窗口将会出现在屏幕上。在汇编窗口中你将看到对应于源程序的汇编代码其中源程序是用黑体字显示下面是且对应的汇编代码。要设立断点我们只需将光标移到你想设断点处然后点击工具条上的InsertRemoveBreakpoints按钮此后你将会看到一个红圆点出现在该汇编代码的右边。VC调试器VC调试器与逻辑条件有关的断点逻辑条件触发断点的设置–选中Breakpoint对话框中的DATA标签–DATA页面中的Expression编辑框中写出你的逻辑表达式如(X==)VC调试器VC调试器监视表达式发生变化断点–选中Breakpoint对话框中的DATA标签–在Expression编辑框中写出你需要监视的表达式VC调试器VC调试器监视数组发生变化的断点–选中Breakpoint对话框中的DATA标签–在Expression编辑框中写出你需要监视数组名–在NumberofElements编辑框输入你需要监视数组元素的个数VC调试器VC调试器监视由指针指向的数组发生变化的断点–选中Breakpoint对话框中的DATA标签–在Expression编辑框中输入形如*pointname,其中*pointname为指针变量名–在NumberofElements编辑框输入你需要监视数组元素的个数VC调试器VC调试器监视外部变量发生变化的断点–选中Breakpoint对话框中的DATA标签–在Expression编辑框中输入变量名–点击在Expression编辑框的右边的下拉键头–选取Advanced选项这时AdvancedBreakpoint对话框出现–在context框中输入对应的函数名和(如果需要的话)文件名VC调试器VC调试器与WINDOWS消息有关的断点注意:此类断点只能工作在x或Pentium系统上。–选中Breakpoint对话框中的Message标签–在BreakAtWndProc编辑框中输入Windows函数的名称–在SetOneBreakpointFromEachMessageToWatch下拉列表框中选择对应的消息VC调试器VC调试器如何控制程序的运行当我们从菜单Build到子菜单StartDebuging选择Go程序开始运行在Debug状态下程序会由于断点而停顿下来后可以看到有一个小箭头它指向即将执行的代码。随后我们就可以按要求来控制程序的运行:其中有四条命令:Stepover,stepInto,StepOut,RuntoCursor。Stepover的功能是运行当前箭头指向的代码(只运行一条代码)。StepInto的功能是如果当前箭头所指的代码是一个函数的调用则用StepInto进入该函数进行单步执行。StepOut的功能是如当前箭头所指向的代码是在某一函数内用它使程序运行至函数返回处。RuntoCursor的功能是使程序运行至光标所指的代码处。VC调试器VC调试器查看工具的使用调试过程中最重要的是要观察程序在运行过程中的状态这样我们才能找出程序的错误之处。这里所说的状态包括各变量的值寄存中的值,内存中的值堆栈中的值为此我们需要利用各种工具来帮助我们察看程序的状态。VC调试器VC调试器弹出式调试信息泡泡(DataTipsPopupInformation)当程序在断点停下来后要观察一个变量或表达式的值的最容易的方法是利用调试信息泡泡。要看一个变量的值只需在源程序窗口中将鼠标放到该变量上,你将会看到一个信息泡泡弹出其中显示出该变量的值。要查看一个表达式的值先选中该表达式仍后将鼠标放到选中的表达式上同样会看到一个信息泡泡弹出以显示该表达式的值。VC调试器VC调试器变量窗口(VARIABLEWINDOW)断点处或其附近被访问的变量的当前值。Variables窗口的下部有三个标签:AUTO:显示变量和函数返回值LOCAL:显示当前函数的局部变量THIS:在一个C程序中显示this指针当前指向的对象VC调试器VC调试器观察窗口(WATCHWINDOW)被调试器直接跟踪的变量和表达式的当前值。在Watch窗口中指定那些你在程序暂停时总想知道他们当前值的那些变量。在观察窗口中双击Name栏的某一空行输入你要查看的变量名或表达式回车后你将会看到对应的值。观察窗口可有多页分别对应于标签Watch、Watch、Watch。假如你输入的表达式是一个结构或是一个对象你可以用鼠标点取表达式右边的形如以进一步观察其中的成员变量的值。VC调试器VC调试器快速查看变量对话框(quickwatch)在快速查看变量对话框中你可以象利用观察窗口一样来查看变量或表达式的值。但我们还可以利用它来改变运行过程中的变量具体操作如下:()在Debug菜单选择QuickWatch命令这时屏幕上将会出现QuickWatch对话框()在Expression编辑框中输入变量名按回车()在CurrentValue格子中将出现变量名及其当前对应的值()如要改变该变量的值只需双击该变量对应的Name栏输入你要改变的值()如要把该变量加入到观察窗口中点击Addwatch按钮()点击Close按钮返回VC调试器VC调试器查看内存中的值一个指定地址的内存堆。在Memory窗口中在Address编辑框中输入你要查看的内存地址对应内存地址中的值将被显示出来VC调试器VC调试器查看或改变CPU寄存器中的值()在Registers窗口中信息以Register=Value的形式显示其中Register代表寄存器的名字Value代表寄存器中的值()如果你要修改某一个寄存器的值用TAB键或鼠标将光标移到你想改变的值的右边然后输入你想要的值。在寄存器中有一类特殊的寄存器称为标志寄存器其中有八个标志位:OV是溢出标志UP是方向标志EI是中断使能标志Sign是符号标志Zero是零标志Parity是奇偶较验标志Carry是进位标志VC调试器VC调试器查看CallStack在CallStack窗口中可看到还未返回的调用函数列表调用栈给出从嵌套函数调用一直到断点位置的执行路径。VC调试器VC调试器查看Disassembly窗口编译代码的汇编语言翻译补充道屏幕上的源窗口中。“Disassembly”指的是把程序中的机器代码转换为相应的汇编指令。VC编辑快捷键VC编辑快捷键按下Alt键不放点击鼠标左键拖动可以选择文本块、可选择列按着Ctrl键不放单击一个单词可以选择一个单词或双击将光标移在开始位置按住shift点击鼠标左键可选择一段(在IE浏览其中照样可用看不到光标而已)双击鼠标左键可选择一个单词按住shift上下方向键可选择行按住ctrlshift左右方向键可选择一个单词按CtrlC可COPY光标所在的这一行按住shiftEnd可选择本行VC编辑快捷键VC编辑快捷键F向下Tab选择的行全部右移一个TAB键的宽度AltF按定义的格式重新排列选定的文本。shiftF向上shiftTab选择的行全部左移一个TAB键的宽度CtrlF查找、搜索CtrlH替换CtrlG到某行CtrlU选择部分变为小写CtrlshiftU选择部分变为大写CtrlJ向上搜索最近的#if#else#ifdef#endifCtrlK向下搜索最近的#if#else#ifdef#endifCtrl自动配对大括号或小括号。但有时不对应是因为其他字符有“{”或“}”存在VC调试快捷键VC调试快捷键FGo运行碰到断点就停FBuild编译链接FAddRemoveBreakpoint插入删除断点FStepOver一步步运行碰到函数不进去FStepInto一步步运行碰到函数就进去(当然那些WinAPI由于在Dll中,就进不去了!)CtrlFExecuteProgram运行CtrlFCompile编译一个源文件CtrlFRuntoCursor调试到光标所在位置ShiftF StopDebugging停止调试ShiftFQuickWatch快速查看修改变量信息ShiftFStepOut从当前函数中跳出AltFBreakpoint高级断点设置AltCallStack堆栈窗口可以察看函数调用情况AltVariables当前运行代码行的变量或者返回值信息AltWatch可以把关注的变量拖入窗口中察看修改变量信息。VC项目文件说明VC项目文件说明opt工程关于开发环境的参数文件如工具条位置等信息dsp(DeveloperStudioProject)项目文件文本格式,项目参数配置文件不熟悉的话不要手工修改dsw(DeveloperStudioWorkspace)是工作区文件其他特点和dsp差不多可以由dsp生成plg是编译信息文件编译时的error和warning信息文件(实际上是一个html文件),一般用处不大在Tools>Options里面有个选项可以控制这个文件的生成ncb无编译浏览文件(nocompilebrowser)当自动完成功能出问题时可以删除此文件build后会自动生成VC项目文件说明VC项目文件说明以上是我们工程编译时候最常见的下边这些可以不用关心了解就可以了。aps(AppStudioFile)资源辅助文件,二进制格式,一般不用去管他clwClassWizard信息文件实际上是INI文件的格式有兴趣可以研究一下有时候ClassWizard出问题手工修改CLW文件可以解决如果此文件不存在的话每次用ClassWizard的时候会提示你是否重建hpj(HelpProject)是生成帮助文件的工程用microsfotHelpCompiler可以处理mdp(MicrosoftDevStudioProject)是旧版本的项目文件如果要打开此文件的话会提示你是否转换成新的DSP格式map是执行文件的映像信息纪录文件除非对系统底层非常熟悉这个文件一般用不着pch(PreCompiledFile)是预编译文件可以加快编译速度但是文件非常大pdb(ProgramDatabase)记录了程序有关的一些数据和调试信息在调试的时候可能有用exp只有在编译DLL的时候才会生成记录了DLL文件中的一些信息一般也没什么用VC项目文件说明VC项目文件说明Note:如果你想与别人共享你的源代码项目但是把整个项目做拷贝又太大。你完全可以删掉以下文件:dsw、ncb、opt、aps、clw、plg文件以及Debug、Release目录下的所有文件。ProjectSettingProjectSetting大家可能一直在用VC开发软件但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下我们只停留在“使用”它而不会想去“了解”它。因为它只是一个工具我们宁可把更多的精力放在C语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目设计然后写代码然后编译反反复复调试。但是所谓:“公欲善其事必先利其器”。如果我们精于VC开发环境我们是不是能够做得更加游刃有余呢?ProjectSettingProjectSettingVC的处理流程大致分为两步:编译:源文件通过编译生成了obj文件链接:所有obj文件和lib文件通过链接生成exe文件或dll文件下面我们分别讨论这两个步骤的一些细节。ProjectSettingProjectSettingProject>Settings>CCProjectOption中各个参数代表的意义可以参考Msdn比如nologo表示编译时不在输出窗口显示这些设置(我们可以把这个参数去掉来看看效果)等等。一般我们不会直接修改这些设置而是通过这一页最上面的Category中的各项来完成。ProjectSettingProjectSettingGeneralProjectSettingProjectSettingCLanguageProjectSettingProjectSettingCodeGenerationProjectSettingProjectSettingCustomizeProjectSettingProjectSettingListingFilesProjectSettingProjectSettingOptimizationsProjectSettingProjectSettingPrecompiledHeaders预编译头文件的设置。使用预编译可以提高重复编译的速度。VC一般将一些公共的、不大变动的头文件(比如afxwinh等)集中放到stdafxh中这一部分代码就不必每次都重新编译(除非是RebuildAll)ProjectSettingProjectSettingPreprocessor预编译处理。可以定义解除定义一些常量Additionalincludedirectories可以指定额外的包含目录一般是相对于本项目的目录如Include。ProjectSettingProjectSettingProject>Settings>LinkGeneral一些总体设置可以设置生成的文件路径、文件名、连接的库文件。ProjectSettingProjectSettingCustomize这里可以进行使用程序数据库文件的设置。ForceFileOutput:强制产生输出文件(EXE或DLL)PrintProgressMessages:可以将连接过程中的进度信息输出到Output窗口ProjectSettingProjectSettingDebug设置是否生成调试信息以及调试信息的格式。格式可以有MicrosoftFormat、COFFFormat(CommonObjectFileFormat)和BothFormats三种选择SeparateTypes表示将Debug格式信息以独立的PDB文件存放还是直接放在各个源文件的PDB文件中。选中的话表示采用后者的方式这种方式调试启动比较快。ProjectSettingProjectSettingInput这里可以指定要链接的库文件放弃链接的库文件。还可以增加额外的库文件目录一般是相对于本项目的目录如Lib。ForceSymbolReferences可以指定连接特定符号定义的库。ProjectSettingProjectSettingOutputBaseAddress可以改变程序默认的基地址(EXE文件默认为xDLL默认为x)。操作系统装载一个程序时总是试着先从这个基地址开始。EntryPointSymbol可以指定程序的入口地址一般为一个函数名(且必须采用stdcall调用约定)。一般Win的程序EXE的入口为WinMainDLL的入口为DllEntryPoint最好让连接器自动设置程序的入口点。默认情况下通过一个C的运行时库函数来实现:控制台程序采用mainCRTStartup(或wmainCRTStartup)去调用程序的main(或wmain)函数Windows程序采用WinMainCRTStartup(或wWinMainCRTStartup)调用程序的WinMain(或wWinMain必须采用stdcall调用约定)DLL采用DllMainCRTStartup调用DllMain函数(必须采用stdcall调用约定)。Stackallocations用以设置程序使用的堆栈大小(请使用十进制)默认为兆字节。VersionInformation告诉连接器在EXE或DLL文件的开始部分放上版本号。ProjectSettingProjectSetting其他一些参数的设置()Project>Settings>General可以设置连接MFC库的方式(静态或动态)。如果是动态连接在你的软件发布时不要忘了带上MFC的DLL。()Project>Settings>Debug可以设置调试时运行的可执行文件以及命令行参数等。()Project>Settings>CustomBuild可以设置编译连接成功后自动执行一些操作。比较有用的是写COM时希望VC对编译通过的COM文件自动注册可以如下设置:Description:RegisterCOMCommands:regsvrsc$(TargetPath)echoregsvrexetime>$(TargetDir)$(TargetName)trgOutputs:$(TargetDir)$(TargetName)trg()Tools>Options>Directories设置系统的Include、Library路径。ProjectSettingProjectSettingNote:值得注意的是上面各个参数是大小写敏感的在参数后加上“”表示该参数无效各个参数值选项有“*”的表示为该参数的默认值可以使用页右上角的“Reset”按钮来恢复该页的所有默认设置。总结总结VC提供了一个很好的Debug工具其提供的调用栈、条件断点、数据断点、反汇编等工具足够强大足够应付平常的Bug程序员不仅应具有对Bug的定位能力更为主要的还是对于调试工具的掌握、使用的能力。所谓“磨刀不误砍柴工”在开发之前或者开发闲暇时好好的研究一下一些开发、调试工具不愧为一种好的提升这种能力的好办法。能静下心来思考一下这些工具的工作原理就更好了这样不仅能帮助你在编程的时候预见Bug并且对你提高你的编程技巧也会有所帮助。问题讨论问题讨论

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/55

VC++&&MSDN的使用

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利