




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VisualC+开发工具与调试技巧整理1、如何在Release状态下进行调试ProjectSetting=ProjectSetting对话框,选择Release状态。C/C+标签中的Category选General,Optimizations选Disable(Debug),Debutinfo选ProgramDatabase。在Link标签中选中Generatedebuginfo复选框。注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug
2、版一样。2、Release和Debug有什么不同Release版称为发行版,Debug版称为调试版。Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。Release的exe文件链接的是标准的MFCDLL(UseMFCinasharedorstaticdll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装VisualC+6.0的机器上运行。而Debug版本的exe链接了调试版本的MFCDLL文件,在没有安装VisualC+6.0的机器上不能运行,因为缺相应
3、的DLL,除非选择usestaticdllwhenlink。(北大青鸟烟台文化宫中心-)3、ASSERT和VERIFY有什么区另ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。所以后者更安全一点。例如ASSERT(file.Open(strFileName)。一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。4、Workspace和Project之间是什么样的关系每个Workspace可以包括几个project,但只有一个处于Active状态,各个pr
4、oject之间可以有依赖关系,在project的Setting.中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。5、如何在非MFC程序中使用ClassWizard在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。6、如何设置断点按F9在当前光标处增加一个断点和取消一个断点。另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。然后单击【Condition】按钮弹出设置断点条件的对话框进行设置。7、在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能这似乎是目前这个VisualC+6.0版本的一个bug,可按如下步骤使其正常
5、,如再出现,可如法炮制:关闭Project(2)删除工程名.ncb父件(3)重新打开工程8、如何将一个通过ClassWizard生成的类彻底删除首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove就可以了。9、如何将在workspace中消失的类找出来打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。10、如何清除所有的断点菜单EditBreakpoints】,打开Breakpoints对话框,单
6、击【RemoveAll按钮即可。快捷键是“Ctr+Shift+F8”。11、如何再ClassWizard中选择未列出的信息打开ClassWizard对话框,然后切换到“Classnfo”页面。改变Messagfilter,”如选择“Window;Messag或面就会出现Window的信息。12、如何检测程序中的括号是否匹配把光标移动到需要检测的括号前面,按快捷键Ctr+”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。13、如何查看一个宏(或变量、函数)的定义把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F
7、12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。14、如何添加Lib文件到当前工程单击菜单【ProjectSettings1弹出Projectsetting对话框,切换到Link标签页,在Object/librarymodules”处输入Lib文件名称,不同的Lib之间用空格格开。15、如何快速删除项目下的Debug文件夹中临时文件在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selectiononly)菜单即可。16、如何快速生成一个现有工程除了工程名外完全相同的新工程
8、在新建工程的“NeW对话框中选择CustomAppwizard”项,输入新工程的名字,单击【OK】按钮。出现“CustomAppWizard”项,输入新工程的名字,单击【OK】按钮。出现CustonAppWizardStep1of2”对话框,选择ArexistingProject项,单击Next按钮。出现CustomAppWizardStep2of2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。现在就可以项用MFCAppWizard一样用这个定制的向导。如果不想用了,可以在VisualC+6.0安装目录下
9、CommonMSDev98Template目录中删除该Wizard对应的.awx和.pdb文件。17、如何解决VisualC+6.0不正确连接的问题情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“RebuilcAll-次。18、引起LNK2001的常见错误都有哪些遇到的LNK2001错误主要为:unresolvedexternalsymbolsymbol:如果链接程序不能
10、在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:由于编码错误导致的LNK2001错误不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C+源文件了内声明了一变量“varl:却试图在另一个文件内以变量“varl访问改变量。(2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK200
11、1错误。(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。由于编译和联机的设置而造成的LNK2001错误如果编译时使用的是/NOD(/NODERAULTL旧)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误。2)如果没有为wWinMainCRTS
12、tartup设定程序入口,在使用Unicode和MFC时将出现“unresoke(externalon_WinMain16”的LNK2001错误信息。(3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func的引用,在目标文件里即对“_imp_func的引用。如果试图使用静态库UBC.L旧或LIBCMT.LIB进行链接,将在_imp_func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。(5)当编译调
13、试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。(7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C+库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志为内联函数。(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2
14、001错误。19、如何调试一个没有源码的exe文件调用的dll在VisualC+6.0中,进入ProjectSetting对话框然后选择Debug标签页。通常VisualStudio默认executableordebugsession为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。20、VisualC+6.0工程中的项目文件都表示什么.opt:工程关于开发环境的参数文件。如工具条位置等信息。.aps(AppStudioFile)
15、资源辅助文件,二进制格式,一般不用去管它。.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候回提示是否重建。.dsp(DevelopStudioProject):项目文件,文本格式,不过不熟悉的不要手工修改。.dsw(DevelopStudioWorkspace):是工作区文件,其他特点和.dsp差不多。.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单Tool【Op
16、tion】弹出的对话框里面有个选项可以控制这个文件的生成。.hpj(HelpProject):是生成帮助文件的工程,用microsoftHelpCompiler可以处理。.mdp(MicrosoftDevStudioProject):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。.bsc:是用于浏览项目信息的,如果用SourceBrower的话就必须有这个文件。如果不用这个功能的话,可以在ProjectOptions里面去掉GenerateBrowseInfoFile,这样可以加快编译速度。.map是执行文件的映象信息记录文件,除非对系统底层,这个文件一般用不着
17、。.pch(Pre-CompiledFile):是与编译文件,可以加快编译速度,但是文件非常大。.pdb(ProgramDatabase):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。.exp:只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。.ncb:无编译浏览文件(nocompilebrowser)。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。1.4利用MFCS行开发的通用方法介绍以下是我在最初学习VC时所常用的开发思路和方法,希望能对初学VC的朋友有所帮助和启发。1、开发需要读写文件的应用程序并且有简单的输入和输出可以利用单文档视结构
18、。2、开发注重交互的简单应用程序可以使用对话框为基础的窗口,如果文件读写简单这可利用CFile进行。3、开发注重交互并且文件读写复杂的的简单应用程序可以利用以CFormView为基础视的单文档视结构。4、利用对话框得到用户输入的数据,在等级提高后可使用就地输入。5、在对多文档要求不强烈时尽量避免多文档视结构,可以利用分隔条产生单文档多视结构。6、在要求在多个文档间传递数据时使用多文档视结构。7、学会利用子窗口,并在自定义的子窗口包含多个控件达到封装功能的目的。8、尽量避免使用多文档多视结构。9、不要使用多重继承并尽量减少一个类中封装过多的功能。1.5MFC中常用类,宏,函数介绍常用类CRect
19、:用来表示矩形的类,拥有四个成员变量:topleftbottomright。分别表是左上角和右下角的坐标。可以通过以下的方法构造:CRect(intl,intt,intr,intb);指明四个坐标CRect(constRECT&srcRect);由RECT结构构造CRect(LPCRECTlpSrcRect);由RECT吉构构造CRect(POINTpoint,SIZEsize);有左上角坐标和尺寸构造CRect(POINTtopLeft,POINTbottomRight);有两点坐标构造下面介绍几个成员函数:intWidth()const;得到宽度intHeight()const;得到高度C
20、SizeSize()const;得到尺寸CPoint&TopLeft();得到左上角坐标CPoint&BottomRight();得到右下角坐标CPointCenterPoint()const;得当中心坐标此外矩形可以和点(CPoint)相加进行位移,和另一个矩形相加得到“并”操作后的矩形。CPoint:用来表示一个点的坐标,有两个成员变量:xy。可以和另一个点相加。CString:用来表示可变长度的字符串。使用CString可不指明内存大小,CString会根据需要自行分配。下面介绍几个成员函数:GetLength得到字符串长度GetAt得到指定位置处的字符operator+相当于strca
21、tvoidFormat(LPCTSTRlpszFormat,.);相当于sprintfFind查找指定字符,字符串Compare比较CompareNoCase不区分大小写比较MakeUpper改为小写MakeLower改为大写CStringArray:用来表示可变长度的字符串数组。数组中每一个元素为CString对象的实例。下面介绍几个成员函数:Add增加CStringRemoveAt删除指定位置CString对象RemoveAll删除数组中所有CString对象GetAt得到指定位置的CString对象SetAt修改指定位置的CString对象InsertAt在某一位置插入CString对象
22、常用宏RGBTRACEASSERTVERIFY常用函数CWindApp*AfxGetApp();HINSTANCEAfxGetInstanceHandle();HINSTANCEAfxGetResourceHandle();intAfxMessageBox(LPCTSTRlpszText,UINTnType=MB_OK,UINTnIDHelp=0);用于弹出一个消息框C/C+小编谈C语言函数那些事(53)C程序是由一组或是变量或是函数的外部对象组成的。函数是一个自我包含的完成一定相关功能的执行代码段。下面小编和大家分享下C语言中的函数。1. div函数div函数的功能是将两个整数相除,返回商和
23、余数,其用法为:div_t(intnumber,intdenom);程序实例如下:#include#includediv_tx;intmain(void)(x=div(10,3);printf(10div3=%dremainder%dn,x.quot,x.rem);return0;2. dup函数dup函数的功能是复制一个文件句柄,其用法为intdup(inthandle);程序实例代码如下:#include#include#include#includevoidflush(FILE*stream);intmain(void)(FILE*fp;charmsg=Thisisatest;fp=fo
24、pen(DUMMY.FIL,w);fwrite(msg,strlen(msg),1,fp);clrscr();DUMMY.FIL:);getch();flush(fp);keytoquit:);getch();return0;voidflush(FILE*stream)(intduphandle;fflush(stream);duphandle=dup(fileno(stream);DOSbuffer*/close(duphandle);3. atan2函数atan2函数的功能是计算Y/X的反正切值,其用法为doubleatan2(doubley,doublex);程序实例代码如下:#incl
25、ude#includeintmain(void)(doubleresult;doublex=90.0,y=45.0;result=atan2(y,x);printf(Thearctangentratioof%lfis%lfn,(y/x),result);return0;4. gety函数gety函数的功能是返回当前图形位置的y坐标,其用法为:intfargety(void);程序实例代码如下:#include#include#include#includeintmain(void)intgdriver=DETECT,gmode,errorcode;charmsg80;initgraph(&gd
26、river,&gmode,);errorcode=graphresult();if(errorcode!=grOk)(printf(Graphicserror:%sn,grapherrormsg(errorcode);printf(Pressanykeytohalt:);getch();exit;moveto(getmaxx()/2,getmaxy()/2);sprintf(msg,”SelectObject(&pen1);/选择对象进DCdrawWithPen1.(CPen*)pDC-SelectObject(&pen2);选择对象进DCdrawWithPen2pen1.DeleteObje
27、ct();/再次创建前先销毁pen1.CreatePen(PS_SOLID,2,RGB(0,0,0);/再次创建对象(CPen*)pDC-SelectObject(&pen1);选择对象进DCdrawWithPen1.pDC-SelectObject(pOldPen);/恢复此外系统中还拥有一些库存GUI对象,你可以利用CDC:SelectStockObject(SelectStockObject(intnIndex)选入这些对象,它们包括一些固定颜色的刷子,画笔和一些基本字体。 BLACK_BRUSHBlackbrush. DKGRAY_BRUSHDarkgraybrush. GRAY_BR
28、USHGraybrush. HOLLOW_BRUSHHollowbrush. LTGRAY_BRUSHLightgraybrush. NULL_BRUSHNullbrush. WHITE_BRUSHWhitebrush.BLACK_PENBlackpen.NULL_PENNullpen. WHITE_PENWhitepen. ANSI_FIXED_FONTANSIfixedsystemfont. ANSI_VAR_FONTANSIvariablesystemfont. DEVICE_DEFAULT_FONTDevice-dependentfont. OEM_FIXED_FONTOEM-depe
29、ndentfixedfont. SYSTEM_FONTThesystemfont.Bydefault,Windowsusesthesystemfonttodrawmenus,dialog-boxcontrols,andothertext.InWindowsversions3.0andlater,thesystemfontisproportionalwidth;earlierversionsofWindowsuseafixed-widthsystemfont. SYSTEM_FIXED_FONTThefixed-widthsystemfontusedinWindowspriortoversion
30、3.0.ThisobjectisavailableforcompatibilitywithearlierversionsofWindows. DEFAULT_PALETTEDefaultcolorpalette.Thispaletteconsistsofthe20staticcolorsinthesystempalette.这些对象留在DC中是安全的,所以你可以利用选入库存对象来作为恢复DC中GUI对象。大家可能都注意到了绘图时都需要一个DC对象,DC(DeviceContext设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的
31、设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows耀眼的一点设备无关性。如同你将对一幅画使用照相机或复印机将会产生不同的输出,而不需要对画进行任何调整。DC的使用会穿插在本章中进行介绍。c+继承经典例子#includeclassBaseprivate:intb_number;public:Base()Base(inti):b_number(i)intget_number()returnb_number;voidprint()coutb_numberendl;;classDerived:publicBase(private:intd_number;publi
32、c:/constructor,initializerusedtoinitializethebasepartofaDerivedobject.Derived(inti,intj):Base(i),d_number(j);/anewmemberfunctionthatoverridestheprint()functioninBasevoidprint()coutget_number();/accessnumberthroughget_number()coutd_numberendl;intmain()Basea(2);Derivedb(3,4);coutais;a.print();/print()
33、inBasecoutbis;b.print();/print()inDerivedcoutbasepartofbis;b.Base:print();/print()inBasereturn0;没有虚析构函数,继承类没有析构/Example:non-virtualdestructorsfordynamicallyallocatedobjects.#include#includeclassThingpublic:virtualvoidwhat_Am_I()coutIamaThing.n;Thing()coutThingdestructorendl;);classAnimal:publicThing
34、public:virtualvoidwhat_Am_I()coutIamanAnimal.n;Animal()coutAnimaldestructorendl;voidmain()Thing*t=newThing;Animal*x=newAnimal;Thing*array2;array0=t;/basepointerarray1=x;for(inti=0;iwhat_Am_I();deletearray0;deletearray1;return;纯虚函数,多态#include#includeclassPointprivate:doublex;doubley;public:Point(doub
35、lei,doublej):x(i),y(j)voidprint()constcout(x,y);classFigure(private:Pointcenter;public:Figure(doublei=0,doublej=0):center(i,j)Point&location()returncenter;/returnanlvaluevoidmove(Pointp)center=p;draw();virtualvoiddraw()=0;/drawthefigurevirtualvoidrotate(double)=0;/rotatethefigurebyanangle;classCircl
36、e:publicFigureprivate:doubleradius;public:Circle(doublei=0,doublej=0,doubler=0):Figure(i,j),radius(r)voiddraw()coutAcirclewithcenter;location().print();coutandradiusradiusendl;voidrotate(double)coutnoeffect.n;/mustbedefined;classSquare:publicFigureprivate:doubleside;/lengthofthesidedoubleangle;/theanglebetweenasideandthex-axispublic:Square(doublei=0,doublej=0,doubled=0,doublea=0):Figure(i,j),side(d),angle(a)voiddraw()coutAsquarewithcenter;location().print();coutsidelengthside.nTheanglebetweenonesideandtheX-axisisangleendl;voidrotate(doublea)a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理咨询师考试中跨专业合作的必要性试题及答案
- 税务风险防范的实践案例分析试题及答案
- 药剂学模型与计算考试题及答案
- 兴化市学高三级第一学期期中调研测试(政治)
- 药剂药物信息咨询技巧题及答案
- 母猪疫病传播途径考试题及答案
- 目标设定与达成的心理学方法试题及答案
- 卫生管理考试内容分析及客观题型的应对技巧试题及答案
- 知道针灸考试试题及答案
- 激光光学元件试题及答案简析
- 《工业控制网络及组态技术》教案
- 青春期女生健康讲座
- 年产2万吨碳酸二甲酯合成项目初步设计说明书
- 【超星尔雅学习通】西方美术欣赏网课章节答案
- 广东省五年一贯制语文试卷
- 07FG04 钢筋混凝土门框墙(含更正说明)
- 纸箱厂检验岗位职责多篇
- GB/T 4857.15-2017包装运输包装件基本试验第15部分:可控水平冲击试验方法
- GB/T 14514-2013气动管接头试验方法
- GB/T 12467.1-2009金属材料熔焊质量要求第1部分:质量要求相应等级的选择准则
- GB 5009.17-2021食品安全国家标准食品中总汞及有机汞的测定
评论
0/150
提交评论