ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:27.51KB ,
资源ID:26181996      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26181996.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(vc++60调试方法附有快捷键.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

vc++60调试方法附有快捷键.docx

1、vc+60调试方法附有快捷键调试程序可以帮助了解程序是怎样运行的。1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试ProjectSettingProject Settings对话框,选择Release状态。“C/C+”标签页中的Category选General,Optimizations选Disable(Debug),Debug info选Program Database。在“Link”标签页中选中Generate debug info复选框。注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起

2、作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。3、Release和Debug有什么不同。Release版称为发行版,Debug版称为调试版。Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll),比如MFC42.DLL。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在

3、没有安装Visual C+ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,如MFC42D.DLL。在没有安装Visual C+6.0的机器上不能运行,因为缺MFC42D.DLL等,除非选择use static dll when link。4、ASSERT和VERIFY有什么区别ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然编译,但不再判断真假。所以后者更安全一点。例如ASSERT(file.Open(strFileName),一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如

4、果用VERIFY()就不会有这个问题。5、Workspace和Project之间是什么样的关系每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。6、如何在非MFC程序中使用ClassWizard在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。7、如何设置断点按F9在当前光标处增加一个断点和取消一个断点。另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。然后单击【Conditio

5、n】按钮弹出设置断点条件的对话框进行设置。8、在编辑状态下发现成员变量或函数不能显示提示,如何打开显示功能这似乎是目前这个Visual C+ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:(1)关闭Project,(2)删除“工程名.ncb”文件,(3)重新打开工程9、如何将一个通过ClassWizard生成的类彻底删除首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。10、如何将在Workspace中消失的类找出来打开该

6、类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。还可以用以下方法:(1)关闭VC,删除文件夹中的*.clw文件,然后重新打开VC,重建。(2)备份.h和.cpp文件,然后删除.h和.cpp文件,重新加入。(3)在ClassWizard中为这个类生成一个消息处理函数,你就可以在ClassView中看到了,这样可以不用关闭、重启VC。你可以手工删除加进的函数。11、如何清除所有的断点菜单【Edit】【Breakpoints】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。快捷键是“Ctrl + Shift + F

7、8”。12、如何在ClassWizard中选择未列出的信息打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。13、如何检测程序中的括号是否匹配把光标移动到需要检测的括号前面,按快捷键“Ctrl + ”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。14、如何查看一个宏(或变量、函数)的定义把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如

8、果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。15、如何添加Lib文件到当前工程单击菜单【Project】【Settings】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格隔开。16、如何快速删除项目下的Debug文件夹中临时文件在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。17、如何快速生成一个现有工程(除了工程名外),其它完全相同的新工程。

9、在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizardStep 1 of 2”对话框,选择“An existing Project”项,单击【Next】按钮。出现“Custom AppWizardStep 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用

10、了,可以在Visual C+ 6.0安装目录下CommonMSDev98Template目录中删除该Wizard对应的.awx和.pdb文件。18、如何解决Visual C+ 6.0不正确连接的问题情景:明明之前改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间晚的文件全部删除,然后再重新“Rebuild All”一次。19、引起LNK2001的常见错误都有哪些遇到的LNK2001错误主要为:unresolve

11、d external symbol “symbol”如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。一般来说,发生错误的原因有两个:一时所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。一下是可能产生LNK2001错误的原因:1、由于编码错误导致的LNK2001错误1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C+源文件内声明了一个变量“var1”,却视图在另一个文件内以变量“var1”访问改变量。2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。

12、3)调用函数是如果所用的参数类型头函数声明是的类型不符将会产生LNK2001错误。4)视图从基类的构造函数或析构函数中调用虚函数时将会导致LNK2001错误。5)要注意函数和变量的可公用性,只有全局变量、函数时可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。2、由于编译和联机的设置而造成的LNK2001错误1)如果编译时使用的时/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会北链接进工程文件。这种情况

13、下使用/NOD将导致LNK2001错误2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时讲的到“unresolved external on _WinMain16”的LNK2001错误信息。3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“_imp_func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在_imp_func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。4)使用/ML选项编译

14、时,如用LIBCMT.LIB链接回在_errno上发生LNK2001错误。5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C+库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头问卷安里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键

15、字标志为内联函数。8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。20、如何调试一个没有源码的exe文件调用的dll在Visual C+ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将它改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。21、Visual C+ 6.0工程中的项目

16、文件都表示什么。.opt:工程关于开发环境的参数文件,如工具条位置等信息。.aps(AppStudio File):资源辅助文件,二进制格式,一般不用去管它。.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候会提示是否重建。.dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的不要手工修改。.dsw(DevelopStudio Workspace):是工作区文件,其特点和.dsp差不多。.plg:是编译信

17、息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单【Tool】【Option】弹出的对话框里面有个选项可以控制这个文件的生成。.hpj(Help Project):是生成帮助文件的工程,用microsoft Help Compiler可以处理。.mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须用这个文件。如果不用这个功能的话,可以在Project Options里面去掉Ge

18、nerate Browse Info File,这样可以加快编译速度。.map:是执行文件的影像信息记录文件,除非对系统底层,这个文件一般用不着。.pch(Pre-Compiled File):可以加快编译速度,但是文件非常大。.pdb(Program Database):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。.exp:只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。.ncb:无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件,编译工程后会自动生成推荐不错的VC调试入门概述调试是一个程序员最基本的技能,其重

19、要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。 设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。为了增加调试信息,可以按

20、照下述步骤进行: 打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开) 选择C/C+页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息 方式包括: 命令行 Project settings 说明无 None 没有调试信息 /Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行 信息,不包含符号调试信息 /Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函

21、数及原型等 /Zi Program Database 创建一个程序库(PDB),包括类型信息和符号调试信息。 /ZI Program Database for Edit and Continue 除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使#pragma设置的优化功能无效 选择Link页,选中复选框Generate Debug Info,这个选项将使连接器把调试信息写进可执行文件和DLL 如果C/C+页中设置了Program Database以上的选项,则Link incrementally可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编

22、译(即增量编译),而不必每次都从头开始编译。断点是调试器设置的一个代码位置。当程序运行到断点时,程序中断执行,回到调试器。断点是最常用的技巧。调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。设置断点:可以通过下述方法设置一个断点。首先把光标移动到需要设置断点的代码行上,然后按F9快捷键弹出Breakpoints对话框,方法是按快捷键CTRL+B或ALT+F9,或者通过菜单Edit/Breakpoints打开。打开后点击 Break at编辑框的右侧的箭头,选择合适的位置信息。一般情况下,直接选择line xxx就足够了,如果想设置不是当前位置的断点,可以选择Advanced,

23、然后填写函数、行号和可执行文件信息。去掉断点:把光标移动到给定断点所在的行,再次按F9就可以取消断点。同前面所述,打开Breakpoints对话框后,也可以按照界面提示去掉断点。条件断点:可以为断点设置一个条件,这样的断点称为条件断点。对于新加的断点,可以单击Conditions按钮,为断点设置一个表达式。当这个表达式发生改变时,程序就被中断。底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的内存区的大小,但是我设置一个比较的值但是改动范围之外的内存区似乎也导致断点起效。最后一个设置可以让程序先执行多少次然后才到达断点。数据断点:数据断点只能在Breakpoints对话框

24、中设置。选择“Data”页,就显示了设置数据断点的对话框。在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成,例如:在编辑框中输入g_bFlag这个全局变量的名字,那么当程序中有g_bFlag=!g_bFlag时,程序就将停在这个语句处。消息断点:VC也支持对Windows消息进行截获。它有两种方式进行截获:窗口消息处理函数和特定消息中断。在Breakpoints对话框中选择Messages页,就可以设置消息断点。如果在上面那个对话框中写入消息处理函数的名字,那么每次消息被这个函数处理,断点就到达(我觉得如果采用普通断点在这个

25、函数中截获,效果应该一样)。如果在底下的下拉列表框选择一个消息,则每次这种消息到达,程序就中断。Watch:VC支持查看变量、表达式和内存的值。所有这些观察都必须是在断点中断的情况下进行。观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。VC提供一种被称为Watch的机制来观看变量和表达式的值。在中断状态下,在变量上单击右键,选择Quick Watch,就弹出一个对话框,显示这个变量的值。单击Debug工具条上的Watch按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者

26、表达式的值。注意:这个表达式不能有副作用,例如+运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。Memory:由于指针指向的数组,Watch只能显示第一个元素的值。为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。在Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。Variables:Debug工具条上的Variables按钮弹出一个框,显示所有当前执行上下文中可见的变量的值。特别是当前指令涉及的变量,以红色显示。寄存器:Debug工具条上的Registers按钮弹出一个框,显

27、示当前的所有寄存器的值。进程控制:VC允许被中断的程序继续运行、单步运行和运行到指定光标处,分别对应快捷键F5、F10/F11和CTRL+F10。各个快捷键功能如下:快捷键 说明F5 继续运行F10单步,如果涉及到子函数,不进入子函数内部 F11 单步,如果涉及到子函数,进入子函数内部 CTRL+F10 运行到当前光标处。Call Stack:调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的。单击Debug工具条上的Call stack就显示Call Stack对话框。在Call Stack对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。单击这些函数名可

28、以跳到对应的函数中去。其他调试手段系统提供一系列特殊的函数或者宏来处理Debug版本相关的信息,如下:宏名/函数名说明 TRACE 使用方法和printf完全一致,他在output框中输出调试信息 ASSERT 它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText等。VERIFY 和ASSERT功能类似,所不同的是,在Release版本中,ASSERT不计算输入的表达式的值,而VERIFY计算表达式的值。关注一个好的程序员不

29、应该把所有的判断交给编译器和调试器,应该在程序中自己加以程序保护和错误定位,具体措施包括: 对于所有有返回值的函数,都应该检查返回值,除非你确信这个函数调用绝对不会出错,或者不关心它是否出错。 一些函数返回错误,需要用其他函数获得错误的具体信息。例如accept返回INVALID_SOCKET表示accept失败,为了查明具体的失败原因,应该立刻用WSAGetLastError获得错误码,并针对性的解决问题。 有些函数通过异常机制抛出错误,应该用TRY-CATCH语句来检查错误 程序员对于能处理的错误,应该自己在底层处理,对于不能处理的,应该报告给用户让他们决定怎么处理。如果程序出了异常,却不

30、对返回值和其他机制返回的错误信息进行判断,只能是加大了找错误的难度。另外:VC中要编制程序不应该一开始就写cpp/h文件,而应该首先创建一个合适的工程。因为只有这样,VC才能选择合适的编译、连接选项。对于加入到工程中的cpp文件,应该检查是否在第一行显式地包含stdafx.h头文件,这是Microsoft Visual Studio为了加快编译速度而设置的预编译头文件。在这个#include stdafx.h行前面的所有代码将被忽略,所以其它头文件应该在这一行后面被包含。对于.c文件,由于不能包含stdafx.h,因此可以通过Project settings把它的预编译头设置为“不使用”,方法

31、是: 弹出Project settings对话框 选择C/C+ Category选择Precompiled Headers 选择不使用预编译头。ps: DLL的调试假设: 要调试hook.dll hook.h hook.lib1。建立一个新工程Test,将hook整个工程目录拷贝到Test目录下2。在Test工程中需要用到hook.dll的源文件中(或stdafx.h中)加入 #include .hookhook.h 这样在该 源文件中使用:就可以索引到hook.h中所有的导出函数、 变量以及类3。在Test的工程设置-Link-Object/library modules中加入 ./hook

32、/debug/hook.lib4。编译连接好Test之后,发现未找到hook.dll. 这需要设置path. 可以在工程设置-Debug-Working directory中加入 e:Testhookdebug 也可以在autoexe.bat中设置路径5。通过工程-Insert Project into Workspace将hook.dsp工程加入 Test项目中。6。设置hook工程为活动工程,在工程DebugExecutable for Debug session中加入: e:testdebugtest.exe7。现在设置断点,按F5可以正常调试了注意:当调试的DLL被映射到其他的应用程序(非TEST)进程空间并运行时,在该DLL中

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

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