nullVC/MSDN的使用VC/MSDN的使用目的与目标目的与目标学习使用MSDN
学习使用VC调试工具
解决常见的编译错误
环境参数的设置
课程概述课程概述MSDN
VC调试器
常见编译错误
VC快捷键
VC项目文件说明
环境参数的设置
MSDN的使用方法MSDN的使用方法使用上下文关联帮助
按下F1键,可从MSDN库中得到上下文相关帮助。你选择一个基于当前窗口和光标位置的主题,同时你将看到包含上下文相关帮助的MSDN可视窗口。如果在编辑源文件时按下F1键,系统可提供光标处单词的帮助信息。如果可能的帮助主题超过一个,屏幕上出现一系列可选项。 MSDN的使用方法MSDN的使用方法使用关键字搜索帮助
单击MSDN观察器中的Search标签,即可搜索MSDN的关键字列表。此Search标签允许输入查询来查找主题,用户可以使用查询搜索库的全部内容、部分内容和最后查询结果。当限制搜索范围时,可使用最后一个选项。用户可以利用查询来搜索整个MSDN库的内容或只搜索每个主题的标题。
查询过程十分简单,如搜索一个单词,也可以查询一组同义词。使用AND、OR、NEAR和NOT操作符可创建查询。虽然大写便于区分搜索条目和运算符的差别,但这些运算符不需要大写。例如,要查找与单词dialog和tab相关的所有主题,可使用以下查询代码:dialog NEAR tab;要查找main,但不包含winmain的主题,可使用以下查询代码:main NOT WinMain。 MSDN的使用方法MSDN的使用方法浏览目录窗口
使用MSDN库的第三种方法是浏览Contents标签下的目录列表。目录窗口显示每个已有主题的标题,均按易于使用的树形视图排列。当MSDN库目录树完全叠放时,目录窗口中显示的是已有主题的顶层标题。顶层标题与一系列书的题目一样,其图标非常像一本书。当树形图标关闭时,在树形图标的旁边有一个加号(+),表明可以打开此图标显示下一层目录。单击加号(+)可打开树形图标,并展开目录树显示已打开书的目录。看上去很多页面的图标代表书的主题,要显示选中的标题,可单击该主题图标,此时MSDN库主题窗口打开。 常见编译错误常见编译错误1.Fatal Error C1010 unexpected end of file while looking for precompiled header directive 这一般是由于使用了参数/Yu“stdafx.h”,意思是在每个文件中都应该使用#include来包含这个头文件。一般改正,就是在每个CPP文件中包含这个文件就可以。
2.Error C2065
undeclared identifier
调用的方法或变量没有定义。
3.warning C4700
local variable ‘p’ used without having been initialized
使用的变量未经初始化。
4.LNK2001
unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。 VC调试器VC调试器设计及编码之后随之而来的便是调试,它是软件开发的第3步。你的3000行程序可能在编译时一个警告也没有,但却经常死机或者-更糟的是-只偶尔地死机,在你的程序无法正确工作而你又无法确定为什么的时候,就要求助于调试器,让它在程序运行时看一下程序的内部情况。但调试通常情况下更多的是一门艺术而不是科学,它要求有清醒的头脑和敏锐的洞察力。调试器就像一个放大器,它可以扩大你的视野,但只有你了解往哪儿看时才有用。VC调试器VC调试器调试环境的建立
在VC中每当建立一个工程(Project)时,VC都会自动建立两个版本,Release版本,和Debug版本。Release版本是当程序完成后,准备发行时用来编译的版本,而Debug版本是用在开发过程中进行调试时所用的版本。
Debug 版本当中,包含着Microsoft格式的调试信息,不进行任何代码优化,而在Release版本对可执行程序的二进制代码进行了优化,其中不包含任何的调试信息。
在新建立的工程中,你所看到是Debug版本,若要选择Release版本,可以选择菜单Project中的Setting命令,这时屏幕上面弹出Project Setting对话框,在Setting For下拉列表中选择Release。VC调试器VC调试器如何设置断点
在VC中,你可以设置多种类型的断点,我们可以根据断点起作用的方式把这些断点分为三类:
1、与位置有关的断点;
2、与逻辑条件有关的断点;
3、与WINDOWS消息有关的断点;
下面我们分别介绍这三类断点。 VC调试器VC调试器与位置有关的断点
1.一般位置断点
将光标移到你要设断点的位置,当然这一行必须包含一条有效语句的;然后按工具条上的add/remove breakpoint 按钮或按快捷键F9;这时你将会在屏幕上看到在这一行的左边出现一个红色的圆点表示这儿设 立了一个断点。
VC调试器VC调试器2.与位置有关的逻辑断点
有的时候你可能并不需要程序每次运行到这儿都停下来,而是在满足一定条件的情况下才停下来,这时你就需要设置一种与位置有关的逻辑断点。要设置这种断点我们只需要选中Breakpoint对话框中的Location标签,在Location页面中单击Condition按钮,在Expression编辑框中写出你的逻辑表达式,如X>=3或a+b>25,最后按OK返回。这种断点主要是由其位置发生作用的,但也结合了逻辑条件,使之更灵活。 VC调试器VC调试器3.有时我们需要更深入地调试程序,我们需要进入程序的汇编代码,因此我们需要在在汇编代码上设立断点:要设立这种断点我们只需选择Debug Window中的Disassembly子命令,这时汇编窗口将会出现在屏幕上。在汇编窗口中你将看到对应于源程序的汇编代码,其中源程序是用黑体字显示,下面是且对应的汇编代码。要设立断点,我们只需将光标移到你想设断点处然后点击工具条上的Insert/Remove Breakpoints 按钮,此后你将会看到一个红圆点出现在该汇编代码的右边。 VC调试器VC调试器与逻辑条件有关的断点
1.逻辑条件触发断点的设置 ;
– 选中Breakpoint对话框中的DATA标签;
– DATA页面中的Expression编辑框中写出你的逻辑表达式,如(X==3);VC调试器VC调试器2.监视表达式发生变化断点;
– 选中Breakpoint对话框中的DATA标签;
– 在Expression编辑框中写出你需要监视的表达式;VC调试器VC调试器3.监视数组发生变化的断点
– 选中Breakpoint对话框中的DATA标签;
– 在Expression编辑框中写出你需要监视数组名;
– 在Number of Elements 编辑框输入你需要监视数组元素的个数;
VC调试器VC调试器4.监视由指针指向的数组发生变化的断点;
– 选中Breakpoint对话框中的DATA标签;
– 在Expression编辑框中输入形如*pointname,其中*pointname为指针变量名;
– 在Number of Elements 编辑框输入你需要监视数组元素的个数;VC调试器VC调试器5.监视外部变量发生变化的断点;
– 选中Breakpoint对话框中的DATA标签;
– 在Expression编辑框中输入变量名;
– 点击在Expression编辑框的右边的下拉键头;
– 选取Advanced选项,这时Advanced Breakpoint 对话框出现;
– 在context框中输入对应的函数名和(如果需要的话)文件名;VC调试器VC调试器与WINDOWS消息有关的断点
注意:此类断点只能工作在x86 或 Pentium 系统上。
– 选中Breakpoint对话框中的Message标签;
– 在Break At WndProc 编辑框中输入Windows 函数的名称;
– 在Set One Breakpoint From Each Message To Watch下拉列表框中选择对应的消息;VC调试器VC调试器如何控制程序的运行
当我们从菜单Build到子菜单Start Debuging 选择Go 程序开始运行在Debug状态下,程序会由于断点而停顿下来后,可以看到有一个小箭头,它指向即将执行的代码。随后,我们就可以按要求来控制程序的运行:其中有四条命令:Step over, step Into , Step Out ,Run to Cursor 。
Step over 的功能是运行当前箭头指向的代码(只运行一条代码)。
Step Into的功能是如果当前箭头所指的代码是一个函数的调用,则用Step Into 进入该函数进行单步执行。
Step Out的功能是如当前箭头所指向的代码是在某一函数内,用它使程序运行至函数返回处。
Run to Cursor的功能是使程序运行至光标所指的代码处。 VC调试器VC调试器查看工具的使用
调试过程中最重要的是要观察程序在运行过程中的状态,这样我们才能找出程序的错误之处。这里所说的状态包括各变量的值,寄存中的值,内存中的值,堆栈中的值 ,为此我们需要利用各种工具来帮助我们察看程序的状态。VC调试器VC调试器1.弹出式调试信息泡泡(Data Tips Pop_up Information)
当程序在断点停下来后,要观察一个变量或表达式的值的最容易的方法是利用调试信息泡泡。要看一个变量的值,只需在源程序窗口中,将鼠标放到该变量上,你将会看到一个信息泡泡弹出,其中显示出该变量的值。要查看一个表达式的值,先选中该表达式,仍后将鼠标放到选中的表达式上,同样会看到一个信息泡泡弹出以显示该表达式的值。VC调试器VC调试器2.变量窗口(VARIABLE WINDOW)
断点处或其附近被访问的变量的当前值。Variables窗口的下部有三个标签:
AUTO:显示变量和函数返回值;
LOCAL:显示当前函数的局部变量;
THIS:在一个C++程序中,显示this指针当前指向的对象;VC调试器VC调试器3.观察窗口(WATCH WINDOW)
被调试器直接跟踪的变量和表达式的当前值。在Watch窗口中指定那些你在程序暂停时总想知道他们当前值的那些变量。
在观察窗口中双击Name栏的某一空行,输入你要查看的变量名或表达式,回车后你将会看到对应的值。观察窗口可有多页,分别对应于标签Watch1、Watch2、Watch3。假如你输入的表达式是一个结构或是一个对象,你可以用鼠标点取表达式右边的形如 + ,以进一步观察其中的成员变量的值。 VC调试器VC调试器4.快速查看变量对话框(quick watch)
在快速查看变量对话框中你可以象利用观察窗口一样来查看变量或表达式的值。但我们还可以利用它来改变运行过程中的变量,具体操作如下:
(1)在Debug 菜单,选择Quick Watch命令,这时屏幕上将会出现Quick Watch 对话框;
(2)在Expression 编辑框中输入变量名,按回车;
(3)在Current Value 格子中将出现变量名及其当前对应的值;
(4)如要改变该变量的值只需双击该变量对应的Name 栏,输入你要改变的值;
(5)如要把该变量加入到观察窗口中,点击Add watch 按钮;
(6)点击Close 按钮返回; VC调试器VC调试器5.查看内存中的值
一个指定地址的内存堆。
在Memory窗口中,在Address 编辑框中输入你要查看的内存地址,对应内存地址中的值将被显示出来;VC调试器VC调试器6.查看或改变CPU寄存器中的值
(1) 在Registers 窗口中,信息以 Register = Value 的形式显示,其中Register 代表寄存器的名字,Value 代表寄存器中的值;
(2)如果你要修改某一个寄存器的值,用TAB键或鼠标将光标移到你想改变的值的右边,然后输入你想要的值。
在寄存器中,有一类特殊的寄存器称为标志寄存器,其中有八个标志位:
OV是溢出标志
UP是方向标志
EI是中断使能标志
Sign 是符号标志
Zero是零标志
Parity是奇偶较验标志
Carry 是进位标志VC调试器VC调试器7.查看Call Stack
在Call Stack窗口中可看到还未返回的调用函数列表,调用栈给出从嵌套函数调用一直到断点位置的执行路径。VC调试器VC调试器8.查看Disassembly窗口
编译代码的汇编语言
翻译
阿房宫赋翻译下载德汉翻译pdf阿房宫赋翻译下载阿房宫赋翻译下载翻译理论.doc
,补充道屏幕上的源窗口中。“Disassembly”指的是把程序中的机器代码转换为相应的汇编指令。VC编辑快捷键VC编辑快捷键按下Alt 键不放,点击鼠标左键拖动,可以选择文本块、可选择列;
按着Ctrl键不放,单击一个单词,可以选择一个单词,或双击;
将光标移在开始位置,按住shift点击鼠标左键可选择一段(在IE浏览其中照样可用,看不到光标而已);
双击鼠标左键可选择一个单词;
按住shift+上下方向键可选择行;
按住ctrl+shift+左右方向键可选择一个单词;
按Ctrl+C可COPY光标所在的这一行;
按住shift+[End]可选择本行;VC编辑快捷键VC编辑快捷键F3 向下
Tab 选择的行全部右移一个 TAB键的宽度
Alt + F8 按定义的格式重新排列选定的文本。
shift + F3 向上
shift + Tab 选择的行全部左移一个 TAB键的宽度
Ctrl + F 查找、搜索
Ctrl + H 替换
Ctrl + G 到某行
Ctrl + U 选择部分变为小写
Ctrl + shift + U 选择部分变为大写
Ctrl+J 向上搜索最近的#if/#else/#ifdef/#endif
Ctrl+K 向下搜索最近的#if/#else/#ifdef/#endif
Ctrl+] 自动配对大括号或小括号。但有时不对应,是因为其他字符有“{”或“}”存在
VC调试快捷键VC调试快捷键F5 Go 运行碰到断点就停
F7 Build 编译链接
F9 Add/Remove Breakpoint 插入/删除断点
F10 Step Over 一步步运行,碰到函数不进去
F11 Step Into 一步步运行,碰到函数就进去(当然那些WinAPI由于在Dll中,就进不去了!)
Ctrl + F5 Execute Program 运行
Ctrl + F7 Compile 编译一个源文件
Ctrl + F10 Run to Cursor 调试到光标所在位置
Shift + F5 Stop Debugging 停止调试
Shift + F9 Quick Watch 快速查看/修改变量信息
Shift + F11 Step Out 从当前函数中跳出
Alt + F9 Breakpoint 高级断点设置
Alt + 7 Call Stack 堆栈窗口,可以察看函数调用情况
Alt + 4 Variables 当前运行代码行的变量或者返回值信息
Alt + 3 Watch 可以把关注的变量拖入窗口中,察看/修改变量信息。VC项目文件说明VC项目文件说明.opt工程关于开发环境的参数文件,如工具条位置等信息;
.dsp(DeveloperStudio Project)项目文件,文本格式,项目参数配置文件,不熟悉的话不要手工修改;
.dsw(DeveloperStudio Workspace)是工作区文件,其他特点和dsp差不多,可以由.dsp生成;
.plg是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大,在Tools->Options里面有个选项可以控制这个文件的生成;
.ncb无编译浏览文件(no compile browser),当自动完成功能出问题时可以删除此文件,build后会自动生成;VC项目文件说明VC项目文件说明以上是我们工程编译时候最常见的,下边这些可以不用关心,了解就可以了。
.aps(AppStudio File),资源辅助文件,二进制格式,一般不用去管他;
.clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下,有时候ClassWizard出问题,手工修改CLW文件可以解决,如果此文件不存在的话,每次用ClassWizard的时候会提示你是否重建;
.hpj(Help Project)是生成帮助文件的工程,用microsfot Help Compiler可以处理;
.mdp(Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式;
.map是执行文件的映像信息纪录文件,除非对系统底层非常熟悉,这个文件一般用不着;
.pch(Pre-Compiled File)是预编译文件,可以加快编译速度,但是文件非常大;
.pdb(Program Database)记录了程序有关的一些数据和调试信息,在调试的时候可能有用;
.exp只有在编译DLL的时候才会生成,记录了DLL文件中的一些信息,一般也没什么用;
VC项目文件说明VC项目文件说明Note:如果你想与别人共享你的源代码项目,但是把整个项目做拷贝又太大。你完全可以删掉以下文件:.dsw、.ncb、.opt、.aps、.clw、. plg文件以及Debug、Release目录下的所有文件。Project SettingProject Setting大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,设计,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? Project SettingProject SettingVC的处理流程,大致分为两步:
编译:源文件通过编译生成了.obj文件;
链接:所有.obj文件和.lib文件通过链接生成.exe文件或.dll文件;
下面,我们分别讨论这两个步骤的一些细节。 Project SettingProject SettingProject->Settings->C/C++
Project Option中各个参数代表的意义,可以参考Msdn,比如/nologo表示编译时不在输出窗口显示这些设置(我们可以把这个参数去掉来看看效果)等等。一般我们不会直接修改这些设置,而是通过这一页最上面的Category中的各项来完成。 Project SettingProject SettingGeneral
Project SettingProject SettingC++ Language
Project SettingProject SettingCode Generation
Project SettingProject SettingCustomize
Project SettingProject SettingListing Files
Project SettingProject SettingOptimizations
Project SettingProject SettingPrecompiled Headers
预编译头文件的设置。使用预编译可以提高重复编译的速度。VC一般将一些公共的、不大变动的头文件(比如afxwin.h等)集中放到stdafx.h中,这一部分代码就不必每次都重新编译(除非是Rebuild All) Project SettingProject SettingPreprocessor
预编译处理。可以定义/解除定义一些常量,Additional include directories可以指定额外的包含目录,一般是相对于本项目的目录,如..\Include。 Project SettingProject SettingProject->Settings->Link
General
一些总体设置,可以设置生成的文件路径、文件名、连接的库文件。
Project SettingProject SettingCustomize
这里可以进行使用程序数据库文件的设置。
Force File Output:强制产生输出文件(EXE或DLL);
Print Progress Messages:可以将连接过程中的进度信息输出到Output窗口;Project SettingProject SettingDebug
设置是否生成调试信息,以及调试信息的格式。
格式可以有Microsoft Format、COFF Format(Common Object File Format)和Both Formats三种选择;Separate Types表示将Debug格式信息以独立的.PDB文件存放,还是直接放在各个源文件的.PDB文件中。选中的话,表示采用后者的方式,这种方式调试启动比较快。 Project SettingProject SettingInput
这里可以指定要链接的库文件,放弃链接的库文件。还可以增加额外的库文件目录,一般是相对于本项目的目录,如..\Lib。
Force Symbol References可以指定连接特定符号定义的库。 Project SettingProject SettingOutput
Base Address可以改变程序默认的基地址(EXE文件默认为0x400000,DLL默认为0x10000000)。操作系统装载一个程序时总是试着先从这个基地址开始。
Entry-Point Symbol可以指定程序的入口地址,一般为一个函数名(且必须采用__stdcall调用约定)。一般Win32的程序,EXE的入口为WinMain,DLL的入口为DllEntryPoint;最好让连接器自动设置程序的入口点。默认情况下,通过一个C的运行时库函数来实现:控制台程序采用mainCRTStartup (或wmainCRTStartup)去调用程序的main (或wmain)函数;Windows程序采用WinMainCRTStartup (或 wWinMainCRTStartup)调用程序的WinMain (或 wWinMain,必须采用__stdcall调用约定);DLL采用_DllMainCRTStartup调用DllMain函数(必须采用__stdcall调用约定)。
Stack allocations,用以设置程序使用的堆栈大小(请使用十进制),默认为1兆字节。Version Information告诉连接器在EXE或DLL文件的开始部分放上版本号。Project SettingProject Setting其他一些参数的设置
(1)Project->Settings->General,可以设置连接MFC库的方式(静态或动态)。如果是动态连接,在你的软件发布时不要忘了带上MFC的DLL。
(2)Project->Settings->Debug,可以设置调试时运行的可执行文件,以及命令行参数等。
(3)Project->Settings->Custom Build,可以设置编译/连接成功后自动执行一些操作。比较有用的是,写COM时希望VC对编译通过的COM文件自动注册,可以如下设置: Description: Register COM Commands: regsvr32 /s /c $(TargetPath) echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg Outputs: $(TargetDir)\$(TargetName).trg
(4)Tools->Options->Directories,设置系统的Include、Library路径。 Project SettingProject SettingNote:值得注意的是,上面各个参数是大小写敏感的;在参数后加上“-”表示该参数无效;各个参数值选项有“*”的表示为该参数的默认值;可以使用页右上角的“Reset”按钮来恢复该页的所有默认设置。
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
总结VC提供了一个很好的Debug工具,其提供的调用栈、条件断点、数据断点、反汇编等工具足够强大,足够应付平常的Bug,程序员不仅应具有对Bug的定位能力,更为主要的还是对于调试工具的掌握、使用的能力。所谓“磨刀不误砍柴工”,在开发之前或者开发闲暇时,好好的研究一下一些开发、调试工具不愧为一种好的提升这种能力的好办法。能静下心来思考一下这些工具的工作原理就更好了,这样不仅能帮助你在编程的时候预见Bug,并且对你提高你的编程技巧也会有所帮助。 问题讨论问题讨论