分类:
2010-03-25 09:29:53
本人资历尚浅,写这篇文章纯粹是为了起到一个抛砖引玉的作用,希望各位OIer,CSer,ACMer能够批评,指正。
程序出错的类型大致
可以分为两种,语法错误和逻辑错误。语法错误可以通过编译器的出错信息得到纠正。然而逻辑错误则不能,所以各大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窗口),而右面的我们称之为“手动监视区”。(即watch窗
口)
自动监视区是系统自动跟踪的变量名。
系统默认显示auto标签,那是显示在上一步执行过程中,程序中发生改变的变量。
locals
标签跟踪的是某一个函数中的所有变量。
上面的find sourse组合框中指示的是当前在locals标签下在跟踪的变量是属于哪一个函数的。
说
明:当find
sourse组合框中的内容变成灰色时,说明系统正在运行程序,或者等待输入端的数据(通常会是这个情况),此时应当注意程序执行窗口中的内容。
然
而通常仅仅只有自动监视区所监视的变量是不够的,有时我们需要自己定义一些需要跟踪的变量——这个时候我们就要在手动监视区中输入变量名(也可以是系统认
为合法的表达式)来跟踪我们需要的值。
注意:当用户定义了一个指向数组的watch之后,在变量的左边会出现一个小的'+'号,表示这个数组可以
“展开”——显示其中每一个下标所指示的内容,这与其他高级语言的IDE有些不同。
值得一提的是VC++的一个人性化设置:在用户定义的变量很多
时,往往需要通过滚屏才能看到所有的变量——VC++在手动监视区中设定了4个标签以方便用户的使用,在这四个标签的功能是一样的!
断点的设置与一些基本的调试技巧。
断点(breakpoint)是指在调试过程中,只要运行到断点处,系统就会自动停下(除非是使
用bulidexcute命令,但那是在执行编译好的代码,在严格意义上说,这不能算是一个调试命令),通常和go命令和step
over命令配合在一起使用。
设置断点的方法:在程序代码中,移动到需要设置断点的那一行上,按F9键,你可以看到代码行的左端出现了一个红色的
圆点——那是VC++中断点的标志,以后程序在调试过程中,每次执行到这里,都会停下,方便用户观察watch中的内容。
去除断点的命令与设置断
点的命令相同:在已设置断点的地方,再按一次F9键,左端的红色圆点就消失,断点被去除了。
有的时候,我们并不是不需要断点,而是“暂时”不需要
它,这时可以在已设置断点的地方,按Ctrl+F9键,你可以看到原本实心的圆点变成了一个空心的圆圈——断点暂时失效了。恢复断点功能也是按
Ctrl+F9。这个功能在程序很长,需要很多断点的时候尤其有用。
条件断点技术——其实就是在一些分支语句内部设置断点,这个技术很实用,尤其
在程序的某个分支部分发生问题的时候。
关于断点设置在哪里。这可以说是因人而异,而且是一个相当有艺术性的内容,我不想多说什么,但是有一个基本
的原则就是,不要连续设置断点,所谓断点,也可以说是“段”点,在需要连续观察的地方,应当使用step over或者step into命令。
chulia200020012010-03-25 09:34:49
如何在VC中使用DEBUG http://www.ttadd.com/diannao/HTML/152301.html # 选定Debug编译选项 Build -> Set Active Configuration -> Win32 Debug 或者在Build工具栏上的ListBox中选择Debug。 Debug定义了_DEBUG宏,而Release定义了NDEBUG宏。 # 先按F12编译 Browse信息 这样编译后可以查到变量定义。 # 执行Debug 按F5(注意,如果按Ctrl+F5 是Run,起不到Debug的作用)。 在Debug时一定要把Debug工具栏拉出来,方便调试。 # Breakpoints(F9) 用Alt+F9可以对所有的断点进行编辑。 对指令地址(EIP)指定断点 当EIP的值为指定值时中断。如下图:是对SetWindowLong的地址进行设置的(注意:一定要在前面加0x)。 对内存地址设置断点 当指定内存地址发生变化时中断(在运行时设置才管用)。 # Show Next State
chulia200020012010-03-25 09:33:46
如何使用Visual C++调试程序? 作者:贾迎乐 http://dongzi8013.blog.163.com/blog/static/12769597720099274130549/ 与 Dos 程序相比,windows 程序动辄达几万行、十几万行,调试相当复杂。幸好 Visual C++ 提供了功能强大的调试器( Debugger ),使我们可以在源代码、汇编级别上进行调试,在调试中可以使用断言、TRACE 宏输出结合单步执行来综合调试。 1、如何使用编译、连结的出错信息 在编译、连结阶段 Output 窗口会向我们输出当前编译的信息,如果遇到错误,它会向我们报告错误在第几行、是什么错误。这时在错误提示行上双击左键,就可以定位到程序中的出错处,此时就可以根据出错提示修改我们的代码。如这个例子中是一个语法错误——漏写了一个分号。当然,有时真正的错误并不在该行(通常是由某几个错误之间的相关性导致)。这就需要我们在附近几行仔细察看。 如果对所报错误不太理解,可以加亮该错误提示行,然后按F1键,则可察看该错误的较详细解释。(当然,前提是你的英文水平不错)
chulia200020012010-03-25 09:31:20
vc调试方法 http://wenda.tianya.cn/wenda/thread?tid=0722f81aed7b9f90 你执行调试,就上面有的红叉叉的标志,然后就进入你的程序,从开头开始,有几个方法,有STEPOVER,STEPINTO,一般就用STEPOVER就好了,STEPINTO是指进入一个函数,如果有你自己的设计的函数可以用,但是要是有什么系统函数如PRINTF之类的,你要是用STEPINTO就跳到了PRINTF函数里面,这个函数是编译器自己带的,然后就出现一系列让你选什么文件的选项终止你的调试,所以就用STEPOVER就好了,都有快捷键,你熟悉了就好了~~~还有就是你可以把那个调试的命令框放到你的VC的命令行上面,方便调试,在工具里面有设置~~~