c网上查测试调试_第1页
c网上查测试调试_第2页
c网上查测试调试_第3页
c网上查测试调试_第4页
c网上查测试调试_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VCF5:开始调试Shift+F5:F10:F11:调试到下一句,跟进函数Shift+F11:从当前函数中跳出Ctrl+F10:调试到光标所在位置 Alt+F9:高级断点设置variablescallstackRelease1DebugRelease,3malloc的内存,new4(主要是在文中5、使用3或者46_debugNDEBUG进行调试,project->setting->C/C++->Preprocessordefinitions(中文->setting->link选上Generatedebuginfo(中文版是项目->属性->器->调试->生成调试信二、TRACE了。但在程序的Release版本中,它们是被完全的。下面是一个典型的TRACE语句:…intnCountCString…可以看到,TRACECprintf语句,TRACE宏参数的个数是可TRACE0、TRACE1、TRACE2TRACE30、1、2、3。TRACE语句,不知道在哪里输出,查了一晚上资料也MFCTRACETOOLS->MFCTRACER“ENABLETRACING”进行调试运行,GO(F5)(特别注意:不是执行‘!’TRACE内容,是因OUTPUTDEBUGTRACEBUILD窗DEBUGTRACE的内容了,^_^TRACE程序的DEBUG版本中出现,当RELEASE的时候该宏就完全了,从而帮助你调式也在RELEASE的时候减少代码量。TRACEVCIDE环境的输出窗口(该窗口是你编译项目出错提示的哪个窗口,但VCDEBUG版本的程序。DEBUGVIE格式的输出了。VCTRACETRACE1,就是不带动态参数输出字符串,Cprintf("输出字符串");TRACE2:,Cprintf("...%d",变量);TRACE3Cprintf("...%d...%f",1,TRACE4Cprintf("...%d,%d,%d",1,2TRACE宏有点象 以前在C语言中用的Printf函数使程序在运行过程中输出一些调试信 TRACE宏只有在调试状态下才有所输出,而以前用的PrintfPrintf函数一样,TRACEintx=1;inty=16;floatz=TRACE("ThisisaTRACEstatement\n");TRACE("Thevalueofxis%d\n",x);TRACE("x=%dandy=%d\n",x,yTRACE("x=%dandy=%xandz=%f\n",x,y,zTRACEDebugRelease版本的工程中,TRACE三、ASSERT向一个文档对象。一般来讲,编程者在每个函数的开始处均应例行公事地使用assertion。ASSERT宏将会判断表达式,如果一个表达式为真,执行将继续,否则,程序将显示一条消Debug器中。下ASSERT宏去验证一个语句。voidfoo(charp,intsize{ASSERTp0ASSERTsize100100//Dothefoo}这些语句不产生任何代码,除非—DEBUG处理器标志被设置。VisualCDebug版本Release版本不定义这些标志。当—DEBUGassertions//ASSERT(p!=0if(!(p!=0)&&AfxAssertFailedLine(—FILE—,—LINE—))//ASSERT((size〉100);if(!(size〉100)&&AfxAssertFailedLine(—FILE—,—LINE—))Do-whileassertion封装在一个单独的程序块中,使得编译器编译起来很舒畅。IfAfxAssertFailedLine()函数。这个函数将弹出一个框,其中提供三个选项“取消、重试或忽略”,当你选取“重试”时,它将返回TRUE。四、VERIFYassertionDebug版本中起作用,在表达式中不可以包含赋值语句、增加(--voidfoo(charp,intsize){charVERIFY(q=ASSERT((size〉//Dothefoo//Dothefoo}Debug模式下,ASSERTVERIFYRelease模式下,VERIFY宏仍然测试assertionRelease模式下,ASSERT语句被删除了。ReleaseDebug信息,这类错误将很难被发现。五、VC高级调试方法-条件及数据断点的void{for(inti=0;i<1000; {intk=i*10-2;//B inttmp=DoSome(i);//Dintj=i/ }}//其 还可以用其他方法调式也是一样的,你可以用TRACE0宏来输出循环中的每个结果,也可以在debug中看见输出的结果,当出现问题时,输出的结果可能就不一样了,可以分析一下debug中的结果找出问题的所在VC6断点修饰条件就可以轻易解决此问题。步骤如下。Ctrl+BFigure1然后选择D行所在的断点,然后点击condition按钮,在弹出框的最下面一个编辑框1000就够了。出错的。因此,2skip次数,1000513513次循环,然后自动停在断点处。这时,就可以DoSome0的。这样,你就避免了手指的痛苦,节省了时间。Figure1所示,在“Entertheexpressiontobeevaluated:”下i100时程序停下来,就可以输入在编辑框中输入“i==100”。(二) lude"stdafx.h" ludeintmain(intargc,char*{ }这的输出szName1:shenzhen首 给你分析一下为什么会是这样的!首先你在strcpy(szName1,"shenzhen");个地方F9设置一个断点,然后F5运行程序,这是程序会断 设置的断点,如下看到了吧,问题出现的就在这里,系统给szName20x0012ff7040x0012ff7410个字节,F10单步,来到printf("%s\n",szName1)这一行,如下szName1分配的空间已经附上了值F10printf("%s\n",szName1)szName1szName2szName2赋值超过所容纳的字节时szName1的内容了,所以说当在输出结果的时候就出现想不到的结果szName1何时被修改呢?因为没有明显的修改szName1代码。 可以首先在A行设置普通断点,F5运行程序,程序停在A行。然后 Figure2szName24strcpy7szName1。2中红圈处改为条件”szName2[0]==''''y''''“,szName2y时断点就会启动。(三)在callstack窗口中设置断点,选择某个函数,按F9设置一个断点。这样可以从次SetNextStateMent命令(debug过程中,右键菜单中令ABCD行,右键,然后“SetNextStateMent”B、C行。只要在同一函数内,此指令就可以随watchwatch0x65,u101。windowsAPI调用的错误:在左栏输入@err,hr。watchwatch窗口中清除它,否则,messages六、VCConfiguration中增加调试信息,包括Release版本。打开Projectsettings框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单C/C++页,CategorygeneralDebugInfo下拉列表框,可供选择的调试信息方式包括: Projectsettings LineNumbers

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论