vc60安装教程与调试技巧.docx

上传人:b****6 文档编号:5255450 上传时间:2022-12-14 格式:DOCX 页数:21 大小:986.52KB
下载 相关 举报
vc60安装教程与调试技巧.docx_第1页
第1页 / 共21页
vc60安装教程与调试技巧.docx_第2页
第2页 / 共21页
vc60安装教程与调试技巧.docx_第3页
第3页 / 共21页
vc60安装教程与调试技巧.docx_第4页
第4页 / 共21页
vc60安装教程与调试技巧.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

vc60安装教程与调试技巧.docx

《vc60安装教程与调试技巧.docx》由会员分享,可在线阅读,更多相关《vc60安装教程与调试技巧.docx(21页珍藏版)》请在冰豆网上搜索。

vc60安装教程与调试技巧.docx

vc60安装教程与调试技巧

vc6.0的安装过程

1.首先解压安装文件的压缩包

2.然后再选择安装的版本,VC6CN表示的是中文版,VC6EN表示英文版。

3.打开VC6CN文件夹,其中有如下图标,鼠标双击。

4.如下图所示就是我们安装的第一步,单击下一步。

5.选择“接受协议”后单击下一步。

6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。

7.选择“安装visualc++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。

8.单击下一步。

9.如下界面,单击“继续”,开始安装软件。

10.点击“确定”。

11.选择“是”,继续安装。

12.选择“typical”继续安装

13.选择“ok”。

14.选择“确定”

15.选择“确定”

16.取消“安装MSDN”前面的勾号,选择“退出”。

17.选择“是”,取消MSDN的安装。

18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“MicrosoftVisualC++6.0”目录中选择“MicrosoftVisualC++6.0”就可以运行程序了。

也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。

调试技巧

调试程序可以帮助的了解程序是怎样运行的。

1、如何快速地规范代码缩进格式

选中所需要规范的代码,按shift+F8

2、如何在Release状态下进行调试

Project->Setting…->ProjectSettings对话框,选择Release状态。

“C/C++”标签页中的Category选General,Optimizations选Disable(Debug),Debuginfo选ProgramDatabase。

在“Link”标签页中选中Generatedebuginfo复选框。

注:

只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。

3、Release和Debug有什么不同。

Release版称为发行版,Debug版称为调试版。

Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。

Release版运行速度较快,可执行文件较小,但在其编译条件小无法执行调试功能。

Release的exe文件链接的是标准的MFCDLL(UseMFCinasharedorstaticdll),比如MFC42.DLL。

这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装VisualC++6.0的机器上运行。

而Debug版本的exe链接了调试版本的MFCDLL文件,如MFC42D.DLL。

在没有安装VisualC++6.0的机器上不能运行,因为缺MFC42D.DLL等,除非选择usestaticdllwhenlink。

4、ASSERT和VERIFY有什么区别

ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然编译,但不再判断真假。

所以后者更安全一点。

例如ASSERT(file.Open(strFileName)),一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。

如果用VERIFY()就不会有这个问题。

5、Workspace和Project之间是什么样的关系

每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting…中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。

6、如何在非MFC程序中使用ClassWizard

在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。

7、如何设置断点

按F9在当前光标处增加一个断点和取消一个断点。

另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。

然后单击【Condition…】按钮弹出设置断点条件的对话框进行设置。

8、在编辑状态下发现成员变量或函数不能显示提示,如何打开显示功能

这似乎是目前这个VisualC++6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:

(1)关闭Project,

(2)删除“工程名.ncb”文件,(3)重新打开工程

9、如何将一个通过ClassWizard生成的类彻底删除

首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。

10、如何将再Workspace中消失的类找出来

打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。

还可以用以下方法:

(1)关闭VC,删除文件夹中的*.clw文件,然后重新打开VC,重建。

(2)备份.h和.cpp文件,然后删除.h和.cpp文件,重新加入。

(3)在ClassWizard中为这个类生成一个消息处理函数,你就可以在ClassView中看到了,这样可以不用关闭、重启VC。

你可以手工删除加进的函数。

11、如何清除所有的断点

菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【RemoveAll】按钮即可。

快捷键是“Ctrl+Shift+F8”。

12、如何再ClassWizard中选择未列出的信息

打开“ClassWizard”对话框,然后切换到“ClassInfo”页面。

改变“Messagefilter”,如选择“Window”,“Message”页面就会出现Window的信息。

13、如何检测程序中的括号是否匹配

把光标移动到需要检测的括号前面,按快捷键“Ctrl+]”。

如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。

14、如何查看一个宏(或变量、函数)的定义

把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。

15、如何添加Lib文件到当前工程

单击菜单【Project】->【Settings…】弹出“ProjectSetting”对话框,切换到“Link”标签页,在“Object/librarymodules”处输入Lib文件名称,不同的Lib之间用空格格开。

16、如何快速删除项目下的Debug文件夹中临时文件

在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selectiononly)】菜单即可。

17、如何快速生成一个现有工程除了工程名外完全相同的新工程。

在新建工程的“New”对话框中选择“CustomAppwizard”项,输入新工程的名字,单击【OK】按钮。

出现“CustomAppWizard”项,输入新工程的名字,单击【OK】按钮。

出现“CustomAppWizard-Step1of2”对话框,选择“AnexistingProject”项,单击【Next】按钮。

出现“CustomAppWizard-Step2of2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。

编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。

现在就可以项用MFCAppWizard一样用这个定制的向导。

如果不想用了,可以在VisualC++6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应的.awx和.pdb文件。

18、如何解决VisualC++6.0不正确连接的问题

情景:

明明之间改动了一个文件,却要把整个项目全部重新编译链接一次。

刚刚链接好,一运行,又提示重新编译链接一次。

这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。

可以这样处理:

找到工程文件夹下的debug目录,将创建和修改时间都比系统时间晚的文件全部删除,然后再重新“RebuildAll”一次。

19、引起LNK2001的常见错误都有哪些

遇到的LNK2001错误主要为:

unresolvedexternalsymbol“symbol”

如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。

一般来说,发生错误的原因有两个:

一时所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。

一下是可能产生LNK2001错误的原因:

1、由于编码错误导致的LNK2001错误

1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。

例如,如果在C++源文件了内声明了一变量“var1”,却视图在另一个文件内以变量“var1”访问改变量。

2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。

3)调用函数是如果所用的参数类型头函数声明是的类型不符将会产生LNK2001错误。

4)视图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。

5)要注意函数和变量的可公用性,只有全局变量、函数时可公用的。

静态函数和静态变量具有相同的使用范围限制。

当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。

2、由于编译和联机的设置而造成的LNK2001错误

1)如果编译时使用的时/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会北链接进工程文件。

这种情况下使用/NOD将导致LNK2001错误

2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时讲的到“unresolvedexternalon_WinMain@16”的LNK2001错误信息。

3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。

如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。

如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。

4)使用/ML选项编译时,如用LIBCMT.LIB链接回在_errno上发生LNK2001错误。

5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。

6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。

如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头问卷安里却关闭了函数内联(没有inline关键字),只是将得到错误信息。

为避免该问题的发生,应该在相应的头文件中用inline关键字标志为内联函数。

8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。

20、如何调试一个没有源码的exe文件调用的dll

在VisualC++6.0中,进入“ProjectSetting”对话框然后选择Debug标签页。

通常VisualStudio默认“executablefordebugsession”为可执行文件名,但可以将他改成任何你想要的程序。

甚至可以指定不同的工作目录以及传递参数到你的程序。

这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。

21、VisualC++6.0工程中的项目文件都表示什么。

.opt:

工程关于开发化境的参数文件,如工具条位置等信息。

.aps(AppStudioFile):

资源辅助文件,二进制格式,一般不用去管他。

.clw:

ClassWizard信息文件,实际上是INI文件格式,又兴趣可以研究一下。

有时候ClassWizard出了问题,手工修改CLW文件可以解决。

如果此文件不存在的话,每次用ClassWizard的时候会提示是否重建。

.dsp(DevelopStudioProject):

项目文件,文本格式,不过不熟悉的不要手工修改。

.dsw(DevelopStudioWorkspace):

是工作区文件,其他特点和.dsp差不多。

.plg:

是编译信息文件,编译时的error和warning信息文件(实际上时一个html文件),一般用处不大。

在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成。

.hpj(HelpProject):

是生成帮助文件的工程,用microsoftHelpCompiler可以处理。

.mdp(MicrosoftDevStudioProject):

是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。

.bsc:

是用于浏览项目信息的,如果用SourceBrower的话就必须用这个文件。

如果不用这个功能的话,可以在ProjectOptions里面去掉GenerateBrowseInfoFile,这样可以加快编译速度。

.map:

是执行文件的影像信息记录文件,除非对系统底层,这个文件一般用不着。

.pch(Pre-CompiledFile):

可以加快编译速度,但是文件非常大。

.pdb(ProgramDatabase):

记录了程序有关的一些数据和调试信息,在调试的时候可能有用。

.exp:

只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。

.ncb:

无编译浏览文件(nocompilebrowser)。

当自动完成功能出问题时可以删除此文件,编译工程后会自动生成

推荐不错的VC调试入门

概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。

不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。

这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。

本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。

设置为了调试一个程序,首先必须使程序中包含调试信息。

一般情况下,一个从AppWizard创建的工程中包含的DebugConfiguration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。

为了增加调试信息,可以按照下述步骤进行:

•打开Projectsettings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开)

•选择C/C++页,Category中选择general,则出现一个DebugInfo下拉列表框,可供选择的调试信息方式包括:

命令行Projectsettings说明无None没有调试信息/ZdLineNumbersOnly目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息/Z7C7.0-Compatible目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等/ZiProgramDatabase创建一个程序库(PDB),包括类型信息和符号调试信息。

/ZIProgramDatabaseforEditandContinue除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。

这个选项同时使#pragma设置的优化功能无效

•选择Link页,选中复选框"GenerateDebugInfo",这个选项将使连接器把调试信息写进可执行文件和DLL

•如果C/C++页中设置了ProgramDatabase以上的选项,则Linkincrementally可以选择。

选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。

断点断点是调试器设置的一个代码位置。

当程序运行到断点时,程序中断执行,回到调试器。

断点是最常用的技巧。

调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。

设置断点:

可以通过下述方法设置一个断点。

首先把光标移动到需要设置断点的代码行上,

然后•按F9快捷键•弹出Breakpoints对话框,方法是按快捷键CTRL+B或ALT+F9,或者通过菜单Edit/Breakpoints打开。

打开后点击Breakat编辑框的右侧的箭头,选择合适的位置信息。

一般情况下,直接选择linexxx就足够了,如果想设置不是当前位置的断点,可以选择Advanced,然后填写函数、行号和可执行文件信息。

 

去掉断点:

把光标移动到给定断点所在的行,再次按F9就可以取消断点。

同前面所述,打开Breakpoints对话框后,也可以按照界面提示去掉断点。

 

条件断点:

可以为断点设置一个条件,这样的断点称为条件断点。

对于新加的断点,可以单击Conditions按钮,为断点设置一个表达式。

当这个表达式发生改变时,程序就被中断。

底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的内存区的大小,但是我设置一个比较的值但是改动范围之外的内存区似乎也导致断点起效。

最后一个设置可以让程序先执行多少次然后才到达断点。

 

数据断点:

数据断点只能在Breakpoints对话框中设置。

选择“Data”页,就显示了设置数据断点的对话框。

在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。

一般情况下,这个表达式应该由运算符和全局变量构成,例如:

在编辑框中输入g_bFlag这个全局变量的名字,那么当程序中有g_bFlag=!

g_bFlag时,程序就将停在这个语句处。

 

消息断点:

VC也支持对Windows消息进行截获。

他有两种方式进行截获:

窗口消息处理函数和特定消息中断。

在Breakpoints对话框中选择Messages页,就可以设置消息断点。

如果在上面那个对话框中写入消息处理函数的名字,那么每次消息被这个函数处理,断点就到达(我觉得如果采用普通断点在这个函数中截获,效果应该一样)。

如果在底下的下拉列表框选择一个消息,则每次这种消息到达,程序就中断。

WatchVC支持查看变量、表达式和内存的值。

所有这些观察都必须是在断点中断的情况下进行。

观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。

VC提供一种被成为Watch的机制来观看变量和表达式的值。

在断点状态下,在变量上单击右键,选择QuickWatch,就弹出一个对话框,显示这个变量的值。

单击Debug工具条上的Watch按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。

注意:

这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。

Memory由于指针指向的数组,Watch只能显示第一个元素的值。

为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。

在Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。

VariblesDebug工具条上的Varibles按钮弹出一个框,显示所有当前执行上下文中可见的变量的值。

特别是当前指令涉及的变量,以红色显示。

 

寄存器Debug工具条上的Reigsters按钮弹出一个框,显示当前的所有寄存器的值。

 

进程控制VC允许被中断的程序继续运行、单步运行和运行到指定光标处,分别对应快捷键F5、F10/F11和CTRL+F10。

各个快捷键功能如下:

快捷键说明

F5继续运行

F10单步,

如果涉及到子函数,不进入子函数内部F11单步,

如果涉及到子函数,进入子函数内部CTRL+F10运行到当前光标处。

CallStack调用堆栈反映了当前断点处函数是被那些函数按照什么顺序调用的。

单击Debug工具条上的Callstack就显示CallStack对话框。

在CallStack对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。

单击这些函数名可以跳到对应的函数中去。

 

其他调试手段系统提供一系列特殊的函数或者宏来处理Debug版本相关的信息,如下:

宏名/函数名说明TRACE使用方法和printf完全一致,他在output框中输出调试信息ASSERT它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。

对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。

例如,对于一个还没有创建的窗口调用SetWindowText等。

VERIFY和ASSERT功能类似,所不同的是,在Release版本中,ASSERT不计算输入的表达式的值,而VERIFY计算表达式的值。

关注一个好的程序员不应该把所有的判断交给编译器和调试器,应该在程序中自己加以程序保护和错误定位,具体措施包括:

 

•对于所有有返回值的函数,都应该检查返回值,除非你确信这个函数调用绝对不会出错,或者不关心它是否出错。

•一些函数返回错误,需要用其他函数获得错误的具体信息。

例如accept返回INVALID_SOCKET表示accept失败,为了查明具体的失败原因,应该立刻用WSAGetLastError获得错误码,并针对性的解决问题。

 

•有些函数通过异常机制抛出错误,应该用TRY-CATCH语句来检查错误

 

•程序员对于能处理的错误,应该自己在底层处理,对于不能处理的,应该报告给用户让他们决定怎么处理。

如果程序出了异常,却不对返回值和其他机制返回的错误信息进行判断,只能是加大了找错误的难度。

 

另外:

VC中要编制程序不应该一开始就写cpp/h文件,而应该首先创建一个合适的工程。

因为只有这样,VC才能选择合适的编译、连接选项。

对于加入到工程中的cpp文件,应该检查是否在第一行显式的包含stdafx.h头文件,这是MicrosoftVisualStudio为了加快编译速度而设置的预编译头文件。

在这个#include"stdafx.h"行前面的所有代码将被忽略,所以其他头文件应该在这一行后面被包含。

对于.c文件,由于不能包含stdafx.h,因此可以通过Projectsettings把它的预编译头设置为“不使用”,

方法是:

•弹出Projectsettings对话框

•选择C/C++

•Category选择PrecompilationHeader

•选择不使用预编译头。

ps

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1