VC调试方法大全
C语言编程中的代码调试技巧

C语言编程中的代码调试技巧代码调试是软件开发过程中不可或缺的步骤。
通过调试,我们可以找出程序中的错误并改正它们,以确保程序的正确性和稳定性。
本文将介绍一些在C语言编程中常用的代码调试技巧,帮助读者提高调试效率。
1. 使用调试器调试器是一种开发人员常用的工具,它可以帮助我们逐步执行程序并观察变量的值、程序的流程等信息。
使用调试器可以快速定位代码中的问题,并进行逐行调试。
常用的C语言调试器包括GDB和LLDB 等,它们提供了丰富的调试功能,如设置断点、查看变量值、单步执行等操作。
2. 打印调试信息在C语言编程中,经常使用printf函数来输出调试信息。
通过在关键位置插入printf语句,我们可以观察变量的值、程序的控制流程等信息,从而确定代码是否按照预期执行。
在调试完成后,记得将调试信息删除或注释掉,以免影响程序的性能和可读性。
3. 检查输入输出代码中的输入输出错误是常见的Bug来源之一。
在调试过程中,我们应该保持怀疑的态度,检查程序输入和输出是否符合预期。
可以使用断言(assert)或条件判断来验证输入输出的正确性,并在出错时打印相应的错误信息。
4. 利用日志记录日志记录是一种常见的调试手段,通过将程序运行时的状态信息记录到日志文件中,我们可以在出错时追踪问题。
在C语言中,可以使用标准库函数fprintf将信息输出到文件。
可以根据需要,将日志信息输出到控制台或特定的文件中,并在调试过程中逐步增加日志的详细程度。
5. 编写单元测试单元测试是一种有效的调试手段,它可以帮助我们验证代码的正确性。
在C语言中,可以使用一些测试框架,如Unity和Check等,来编写单元测试代码。
通过编写针对每个函数的测试用例,并执行这些测试用例,我们可以快速发现和修复代码中的问题。
6. 排查内存错误内存错误是C语言编程中常见的问题,如内存泄漏、指针错误等。
工具如Valgrind等可以帮助我们检测和修复这些内存问题。
另外,通过使用动态内存分配函数(如malloc和free)时,务必注意内存的分配和释放是否匹配,以免产生不可预料的错误。
VC调试技术

VC调试技术程序出错的类型大致可以分为两种,语法错误和逻辑错误。
语法错误可以通过编译器的出错信息得到纠正。
然而逻辑错误则不能,所以各大IDE(集成开发环境)中都提供了debug功能,用来分析和排除程序中的逻辑错误,排除逻辑错误的过程又称调试(或debug),下面谨以VC++6.0的调试环境做介绍。
常用的调试命令主要有:step into 命令快捷键:F11单步执行每条语句,在遇到函数的时候,系统将进入函数,单步执行其中的语句。
step over 命令快捷键:F10单步执行每条语句,但在遇到函数时候,系统将把函数当作“一条语句”来执行,自动执行其中的内容,而不进入函数内部单步执行。
run to cursor 命令快捷键:Ctrl+F10系统将自动执行到用户光标所指的语句前。
(这个功能很有用,可以将精力集中到有问题的地方,从而节省调试时间)Go 命令快捷键:F5系统将编译,连接,自动运行程序,但是会在程序设置了断点(breakpoint)处停下。
BuildExcute 命令快捷键:Ctrl+F5系统将编译,连接,运行编译好的程序代码,因此不会在断点处停留,但是在程序执行结束之后,系统会给一个Pause,以方便用户观察输出结果。
Stop debug命令快捷键:Shift+F5本命令是用来终止动态调试过程的。
动态调试的主要方法——watch(监视变量)在程序编译通过以后,当使用了step into,step over,run to cursor, go命令使系统在程序执行的过程中停下之后,系统就会进入调试状态。
调试过程中,你的程序执行窗口会调到后台,而系统窗口中会显示你的程序,其中的黄色箭头指向的是系统下一步将要执行的语句。
而系统窗口下面的那个监视窗口就是我们将要介绍的重点.watch窗口被左右分成了两个部分,左面的那部分我们姑且称之为“自动监视区”(即variable窗口),而右面的我们称之为“手动监视区”。
VC程序调试.

VC程序调试VC程序调试调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
一、VC程序调试方法 VC的调试功能:首先,再次强调要用Go命令运行一个将要调试的程序;如果要中止调试状态下的运行程序可以点击Stop Debugging命令,还可以通过Break选项以可恢复方式中断调试程序的运行流程(用Restart选项可以重新开始运行程序);Step Into选项表示每次只执行一行语句(单步执行),但如果当前代码是调用一个函数,那么Step Into表示进入该函数,全部函数语句执行完后返回,而Step Over则是跳出这个函数;Step To Cursor 选项表示程序将执行到光标所在的可执行语句行上;在调试多线程程序时,可以在线程函数或主应用程序线程中设置断点,还可以用Break选项结束线程后用Threads选项查看运行线程列表,也可以选择悬挂和恢复每个线程;在设置断点后,在VC "查看"菜单的"调试窗口"中可以查看变量、内存、调用堆栈、寄存器以及反汇编语句。
在程序中设置断点的方法是,点击要设置的代码行并点击设置代码的工具栏按钮,会出现在代码行最左边的一个小黑点即是断点标志,这时再选Go 程序会在执行到端点处停下来,如果要继续执行可以再选Go。
通过选择VC"工具"菜单下的"源浏览器"可以生成一个.BSC文件,使用浏览器可以从中发现多种信息:程序中任何一个变量、函数、类或宏在何处定义及引用;可以列出所有声明的函数类、变量、宏;可以发现调用一个指定函数的所有函数;可以找到一个指定类的派生来源或者它派生出哪些类。
在使用微软程序开发库MSDN时,我们会发现其中的VC示例经常采用看似多余的ASSERT语句,其作用就是使程序具有"维护"性。
VC6.0调试方法

VC6.0调试⽅法
1.打开你要调试代码的⼯作空间。
2.按快捷键F5或点击以下图⽚上标记的图标进⼊调试模式。
3.打开调试⼯具条,⼀般情况下当你按F5键后会⾃动弹出,如果没有弹出的话,右击⼯具栏空⽩处,会弹出下图,选中调试,就会出现调试⼯具条。
4.接下来,在监视窗⼝中添加你要监视数据变化的变量。
5.按F11逐语句的调试代码,如果某⼀语句是⼀函数,你不希望进⼊该函数时,F10逐过程来查看,在代码的调试过程中,通过监视窗⼝查看变量值的变化,从⽽确定代码是否有问题。
6.如果希望跳出某⼀函数时,按快捷键Shift+F11,或者直接点击调试⼯具条上的按钮就可以跳出该函数了。
7.如果只是希望调试某⼀部分代码的话,可以设置断点来调试,调试⽅法如上,只是在要调试的代码之间⽤断点来分开。
设置断点时,光标放在你要设置断点的那⾏,按F9或点击编译微型条上⾯的类似⼿状的按钮即可。
C语言技术调试方法详解

C语言技术调试方法详解在软件开发中,调试是一个非常重要的环节。
而对于C语言程序员来说,掌握一些高效的调试方法是必不可少的。
本文将详细介绍一些常用的C语言技术调试方法,帮助读者更好地定位和解决程序中的问题。
一、日志输出日志输出是调试中最常用的方法之一。
通过在程序中插入日志输出语句,可以在程序运行时打印出关键信息,以便进行排查。
在C语言中,可以使用printf函数进行日志输出。
例如,当我们需要查看某个变量的值时,可以使用printf("variable = %d\n", variable)语句将其打印出来。
然而,过多的日志输出会导致程序运行速度变慢,影响性能。
因此,在实际调试中,我们需要根据需要选择输出的内容和输出的位置,以达到既能满足调试需求又不会影响程序性能的目的。
二、断点调试断点调试是一种非常常用的调试方法,它可以让程序在特定位置停下来,以便我们观察程序的状态。
在C语言中,可以使用调试器(如GDB)来设置断点。
通过在代码中插入断点,当程序执行到断点位置时,会自动停下来,我们可以查看变量的值、执行的路径等信息。
除了设置断点,调试器还提供了一些其他的功能,如单步执行(逐行执行代码)、观察变量(查看变量的值)、修改变量(修改变量的值)等。
这些功能都可以帮助我们更好地理解程序的执行过程,找出问题所在。
三、内存调试内存问题是C语言程序中常见的问题之一。
内存调试主要是针对内存泄漏、内存越界等问题进行排查。
在C语言中,可以使用一些工具来进行内存调试,如Valgrind。
Valgrind是一个开源的内存调试工具,它可以检测出程序中的内存错误,如未初始化的变量、内存泄漏等。
通过运行程序时加上Valgrind的命令,它会对程序进行监控,并在出现内存错误时给出相应的提示。
除了使用工具,我们还可以通过手动检查代码来进行内存调试。
例如,当程序出现内存泄漏时,我们可以检查程序中是否有未释放的动态分配的内存;当程序出现内存越界时,我们可以检查数组的访问是否越界等。
VC调试

VC调试入门概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出好的软件。
这里简要的根据经验列出调试中比较常用的技巧。
本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。
设置为了调试一个程序,首先必须使程序中包含调试信息。
一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。
为了增加调试信息,可以按照下述步骤进行:∙打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开)∙选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息方式包括:∙选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL∙如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。
选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。
断点断点是调试器设置的一个代码位置。
当程序运行到断点时,程序中断执行,回到调试行在线调试。
设置断点:可以通过下述方法设置一个断点。
首先把光标移动到需要设置断点的代码行上,然后∙按F9快捷键∙弹出Breakpoints对话框,方法是按快捷键CTRL+B或ALT+F9,或者通过菜单Edit/Breakpoints 打开。
打开后点击Break at编辑框的右侧的箭头,选择合适的位置信息。
VC调试方法
VC调试方法Visual C/C++ 是众多C/C++编译器中,调试功能较为强大的编译器之一。
调试程序是每个初学者必须经历的过程,只有不断发现自己的错误,才能减少编程错误,提高编程能力。
当然我们不建议一遇到错误就调试,我希望大家先用眼睛看,把常见的错误都改正后,最后不行再调试,这样编程能力才会进步。
要做到十分钟上百行无错代码的能力,不下苦功是练不成的。
常用的调试快捷键有:F10 单步运行,不进入函数。
F11 单步运行,进入函数。
如果是自定义函数,则进入自定义函数。
如果是系统函数,如scanf,printf,return 等等,则进入汇编,当然这不是我们期望的。
单步运行的同时,左下方会自动显示当前被改变值的变量,右下方则可以输入自定义变量。
一般F10,F11结合使用。
F9 设置断点。
光标所在行设置断点。
F5 运行到断点处暂停。
为了更快运行到我们关心的地方,避免F10一步一步的运行浪费时间。
F9,F5一般结合使用,到我们关注的地方后,我们可以继续F10。
设断点的另外一大好处,是在递归程序中设置断点,可以很快运行到下一层中。
写程序要养成良好代码风格,没有人会喜欢看别人错误的代码,尤其是那些没有分行缩进,一律左对齐的代码。
养成分行缩进的风格在检查括号匹配的时候,也非常方便。
运行时错误:一运行就弹出窗口,或在某些输入数据的情况下,弹出“内存出错警告”的窗口。
多数是由于指针访问非法空间造成的,比如未动态开辟就访问,释放后再次访问或释放等等。
数组下标越界,开辟极大空间等也有可能导致此类错误。
解决方法,可以通过单步运行F10或运行到断点处F5,确定出错行,然后仔细检查代码,加以修正。
附带一个视频文件,希望对大家的学习有所帮助。
一、调试基础调试快捷键F5:开始调试Shift+F5: 停止调试F10:调试到下一句,这里是单步跟踪F11:调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9:设置(取消)断点Alt+F9: 高级断点设置跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口VC6.0Debug调试总结1. 如何显示Debug工具栏窗口?①:在任意工具栏的位置,单击鼠标右键,勾选Debug项②:Tools---->Customize--àToolbars--àDebug--àclose引申:工具栏和工具条的区别?一个工具栏可以放置多个工具条。
VC6.0中如何调试程序说明大全
设置断点
将光标放到需要设置断点的行
设置断点
点击按钮
断点设置好
VC++程序调试演示
• 程序调试概述 • Debugger工具栏简介 • 启动Debugger • 变量跟踪 • 设置断点 • 快速执行到一个断点 • 结束Debugger • 快速查看变量类型
快速执行到一个断点
点击按钮
快速执行到断点设置行
* 选中Breakpoint对话框中的DATA标签,对应的页面将会弹出
* DATA页面中的Expression编辑框中写出逻辑表达式,如(X==3);
2、监视表达式发生变化断点: * 从EDIT 菜单中选中breakpoint命令,屏幕 上将会出现Breakpoint对话框。 * 选中Breakpoint对话框中的DATA标签,对 应的页面将会弹出。 * 在Expression编辑框中写出需要监视的表 达式。 * 最后按OK键返回。
4 控制程序的运行
从菜单Build到子菜单Start Debuging 选择Go程序开 始运行在Debug状态下,程序会由于断点而停顿下来后, 可以看到有一个小箭头,它指向即将执行的代码。按要求 来控制程序的运行,其中有四条命令:Step over, step Into , Step Out ,Run to Cursor。Leabharlann Debugger工具栏简介
(SHIFT+F11)确认当前子程序中没有程序错误时,该选项可 以快速执行该子程序,并停留在子程序后面的语句
Debugger工具栏简介
(CTRL+F10)快速执行到光标所在的代码处
Debugger工具栏简介
(SHIFT+F9)显示QuickWatch窗口,在该窗口可以计算表达 式的值
C编程的调试技巧
/* include file */ #include "defs.h" #include "oaks8lib.h"
/* define common symbol
*/
/* for function to deal with OAKS8-LCDBoard peripheral */
/* define function prototype */
****************************************************************************
* History :
*""FILE COMMENT END""*******************************************************/
➢ 单步执行是最重要的调试手段!
#include <iostream.h>
int main()
{
char type = s;
static void print_dec(unsigned char *message, int dec);
/* display decimal number in LCD */
/*""FUNC COMMENT""*************************************************************
结 论1
➢ 永远不要写过长的语句,应该让代码尽可 能简单;永远不要把两条语句写在一行中, 以便于调试。
#include <iostream.h>
void main()
vc++6.0_调试详细教程(17种方法)
vc++6.0 调试详细教程Step intoStep overStep outRun to cursorWatchVariablesRegistersMemoryStop DebugCall stackDisassemblyRestart Debugger2、调试的一般过程调试,就是在程序的运行过程的某一阶段观测程序的状态。
在一般情况下程序是连续运行的,所以我们必须使程序在某一地点停下来。
我们所做的第一项工作就是设立断点;其次再运行程序;当程序在设立断点处停下来时,利用各种工具观察程序的状态。
程序在断点停下来后,有时我们需要按我们的要求控制程序的运行,以进一步观测程序的流向。
下面我们依次来介绍断点的设置,如何控制程序的运行以及各种观察工具的利用。
3、设置断点在VC中,可以设置多种类型的断点,根据断点起作用的方式把这些断点分为三类:1、与位置有关的断点;2、与逻辑条件有关的断点3、与WINDOWS消息有关的断点。
主要介绍前面两种断点。
4、设置位置断点最简单的是设置一般位置断点:¡ 把光标移到你要设断点的位置,当然这一行必须包含一条有效语句的;¡ 然后按工具条上的add/remove breakpoint 按钮或按快捷键F9。
将会在屏幕上看到在这一行的左边出现一个红色的圆点表示这里设立了一个断点5、设置位置断点-图示6、设置逻辑断点有的时候可能不需要程序每次运行到这儿都停下来,而是在满足一定条件的情况下才停下来,这时就需要设置一种与位置有关的逻辑断点。
从EDIT 菜单中选中Breakpoints命令,这时Breakpoints对话框将会出现在屏幕上。
选中Breakpoint对话框中的Location标签,使Location页面弹出。
如下页图所示。
7、8、设置逻辑断点单击上页Condition按钮,弹出Breakpoint Condition对话框,在expression_r编辑框中写出你的逻辑表达式,最后按OK返回。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、调试基础 调试快捷键F5:开始调试Shift+F5:停止调试F10 : 调试到下一句,这里是单步跟踪 F11 :调试到下一句,跟进函数内部跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试 重试— > 取消— > 调试 函数堆栈,用variables 或者call stack 窗口Release 调试经常测试你的Debug 和Release 版本不要移除调试代码,如用 ASSERT, TRACE 等。
初始化变量,特别是全局变量, malloc 的内存,new 的内存当你移除某个资源时,确保你移除了所有跟这个资源相关的申明(主要是在 resouce.h 文中)使用3或者4级的警告级编译你的代码,并确保没有警告, Project->setting->c/c++->warninglevel (版是项目-> 属性->C/C++-> 常规— > 警告等级)6、—debug 改成 NDEBUG 进行调试,project->setting->C/C++->Preprocessordefinitions >属性->C/C++->预处理器-> 预处理定义)(这里是debug 和Release 编译的重要不同之一)VC 调试方法大全VC 调试方法大全Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置 F9: 设置(取消)断点 Alt+F9:高级断点设置中文(中文版是项目-7、在 Release 中调试源代码,project->setting->C/C++->debug info 选择ProgramDataBase (中文版是项目-> 属性->C/C++-> 常规-> 调试信息格式-> 用于编辑并继续"的程序数据库),Project — >setting->link 选上Generate debug info ( 中文版是项目-> 属性-> 链接器-> 调试-> 生成调试信息)8、走读代码,特别关注堆栈和指针二、TRACE 宏 当选择了 Debug 目标,并且afxTraceEnabled 变量被置为TRUE 时,TRACE 宏也就随之被激活了。
但在程序的Release 版本中,它们是被完全禁止的。
下面是一个典型的TRACE 语句:int nCount =9;CString strDesc("total");TRACE("Count =%d,Descri ption =%s\n",nCount,strDesc);可以看到,TRACE 语句的工作方式有点像C 语言中的printf 语句,TRACE 宏参数的个数是可变的,因此使用起来非 常容易。
如果查看 MFC 的源代码,你根本找不到TRACE 宏,而只能看到TRACE0、TRACE1、TRACE2和TRACE3宏,它们的参数分别为 0、1、2、3。
个人总结:最近看网络编程是碰到了 TRACE 语句,不知道在哪里输出,查了一晚上资料也没找出来,今天终于找到 了,方法如下:1.在MFC 中加入TRACE 语句2.在 TOOLS->MFCTRACER 中选择 “ ENABLE TRACING ”点击 OK3.进行调试运行,G0(F5)(特别注意:不是执行!'以前之所以不能看到TRACE 内容,是因为不是调试执行,而是!‘了,切记,切记)口,在那里就看到TRACE 的内容了, 以下是找的TRACE 的详细介绍:TRACE 宏对于VC 下程序调试来说是很有用的东西,有着类似出现,当RELEASE 的时候该宏就完全消失了,从而帮助你调式也在 使用非常简单,格式如下:TRACE("DDDDDDDDDDD");TRACE("wewe%d",333);4.然后就会在OUT PUT 中的DEBUG 窗口中看到TRACE 内容了,调试执行会自动从 BUILD 窗口跳到DEBUG 窗printf 的功能;该宏仅仅在程序的 DEBUG 版本中 RELEASE 的时候减少代码量。
同样还存在TRACEO , TRACE1 , TRACE2 分别对应0,1,2。
个参数TRACE信息输出到VC IDE环境的输出窗口(该窗口是你编译项目出错提示的哪个窗口),但仅限于你在VC中运行你的DEBUG版本的程序。
TRACE信息还可以使用DEBUGVIEW 来捕获到。
这种情况下,你不能在VC的IDE环境中运行你的程序,而将BUILD好的DEBUG版本的程序单独运行,这个时候可以在DEBUGVIEW 的窗口看到DEBUGVIE格式的输出了。
VC中TRACE的用法有以下四种:TRACE1,就是不带动态参数输出字符串,类似C的Printf(”输出字符串");TRACE2:中的字符串可以带一个参数输出,类似 C 的Printf("...%d", 变量);TRACE3 :可以带两个参数输出,类似 C 的Printf("...%d...%f", 变量1,变量2);TRACE4可以带三个参数输出,类似C的Printf("...%d ,%d,%d",变量1,变量2,变量3);TRACE宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。
但有一点不同的是:TRACE宏只有在调试状态下才有所输出,而以前用的Printf函数在任何情况下都有输出。
和Printf函数一样,TRACE函数可以接受多个参数如: int x = 1;int y = 16;float z = 32.0;TRACE( "This is a TRACE statement^");TRACE( "The value of x is %d\n", x );TRACE( "x = %d and y = %d\n", x, y );TRACE( "x = %d and y = %x and z = %f\n", x, y, z );要注意的是TRACE宏只对Debug版本的工程产生作用,在Release版本的工程中,TRACE宏将被忽略。
三、ASSERT 宏如果你设计了一个函数,该函数需要一个指向文档对象的指针做参数,但是你却错误地用一个视图指针调用了这个函数。
这个假的地址将导致视数据的破坏。
现在,这种类型的问题可以被完全避免,只要在该函数的开始处实现一个ASSERT测试,用来检测该指针是否真正指向一个文档对象。
一般来讲,编程者在每个函数的开始处均应例行公事地使用assertion。
ASSERT宏将会判断表达式,如果一个表达式为真,执行将继续,否则,程序将显示一条消息并且暂停,你可以选择忽视这条错误并继续、终止这个程序或者是跳到Debug器中。
下面一例演示了如何使用一个ASSERT宏去验证一个语句。
void foo(char p, int size )ASSERT( p 匸0 ); // 确认缓冲区的指针是有效的ASSERT( ( size >= 100 ); // 确认缓冲区至少有100个字节Do — while 循环将整个 assertion 封装在一个单独的程序块中,使得编译器编译起来很舒畅。
If 语句将求取表达式的值并且当结果为零时调用 AfxAssertFailedLine() 函数。
这个函数将弹出一个对话框,其中提供三个选项 取消、重试 或忽略”当你选取 重试”时,它将返回TRUE 。
重试将导致对AfxDebugBreak()函数的调用,从而激活调试器。
AfxAssertFailedLine() 是一个未正式公布的函数,它的功能就是显示一个消息框。
该函数的源代码驻留在afxasert.cpp中。
函数中的一FILE —和一LINE —语句是处理器标志,它们分别指定了源文件名和当前的行号。
AfxAssertFailedLine() 是一个未正式公布的函数,它的功能就是显示一个消息框。
该函数的源代码驻留在afxasert.c pp中。
函数中的一FILE —和一LINE —语句是处理器标志,它们分别指定了源文件名和当前的行号。
四、VERIFY因为 assertion 只能在程序的Debug 版本中起作用,在表达式中不可以包含赋值语句、增加语句( + + )或者是减少 语句( ---- ), 因为,这些语句实际改变数据。
可有时你可能想要验证一个能动的表达式,使用一个赋值语句。
那么 就到了用VERIFY 宏来替代ASSERT 。
例如:voidfoo(char p, int size )// Do the foo calculation这些语句不产生任何代码,除非 一DEBUG 处理器标志被设置。
Visual C ++只在Debug 版本设置这些标志,而在Release 版本不定义这些标志。
当 一DEBUG 被定义时,两个assertions 将产生如下代码://ASSERT ( P 匸 0 );do{if( !(p 匸0) && AfxAssertFailedLine(AfxDebugBreak();}while(0);—FILE —, —LINE —))//ASSERT((size〉=100);do{if(!(size 〉= 100) && AfxAssertFailedLine( — FILE —, — LINE —))AfxDebugBreak();}while(0);char q;VERIFY(q = p);//Do the foo calculation//Do the foo calculation在Debug 模式下,ASSERT 和VERIFY 是一回事,但是在Release 模式下,VERIFY 宏仍然测试表达式而assertion 却不起任何作用。
可以说,在 Release 模式下,ASSERT 语句被删除了。
请注意,如果你在一个ASSERT 语句中错误地使用了一个能动的表达式,编译器将不做任何警告地忽略它。
在Release 模式下,该表达式就会被无声息地删除掉,这将会导致程序的错误运行。
由于 Debug 信息,这类错误将很难被发现。
五、VC 高级调试方法-条件及数据断点的设定 (一)位置断点(LocationBreakpoint大家最常用的断点是普通的位置断点,在源程序的某一行按 F9就设置了一个位置断点。