在第一篇中,我们为大家介绍了如何用VC6进行断点调试,可以实现程序的分步执行。今天我们将继续深入,进行更多断点调试的学习。

首先,写一个例子程序:

#include
int fun()
{
	printf("Welcome to C language Reserch Center\n");
	return 0;
}
int main()
{
	int i=0;
	int sum=0;
	fun();
	while(i++<100)
	{
		sum+=i;
	}
	printf("1+2+3+...+99+100 = %d\n",sum);
 
    return 0;
}


大家可以先行阅读以下程序,比较简单,调用一个自定义函数输出一句话,其二,计算1+2一直加到100的和并输出。

然后,我们做练习,运用上节课的断点调试逐步跟我们这个程序。

首先,我们在第一行int i=0;这里设置一个断点,运行它,如图:

VC6断点调试之如何下断点(下)

注意看到,黑框里什么都没有输出,并且下方的变量监视里i的值还是垃圾值,因为还未执行这句话。

然后我们F10下一步执行。但当大家执行到fun();函数调用这条语句时,编译器把它当成一句话来执行,并未进入函数内部,而是一步带过,如图:

VC6断点调试之如何下断点(下)

大家可自行上机实验,可以发现F10单步执行的单步是以一条C语言语句为单位的。鉴于这种情况,当我们怀疑fun函数时如何调试呢?

除了可以在fun函数内部设置断点以外,我们还有一个办法,就是不按F10,而按F11,F11的意思是单步执行并介入,也就是说遇到单出的一句话就和F10没什么区别了,但如果是函数调用这种还能“进入”的语句,它就会逐层深入进去!大家能理解吗?

那我们来试一试,重新开始,回到程序一开始的断点处,在黄色箭头指向到fun()时,按F11,大家注意观察!

黄色的箭头会进入fun函数内部,如图:

VC6断点调试之如何下断点(下)

然后可以逐步跟踪fun函数内部的语句了! 怎么样?试试吧

当然,这里提示一下,对于我们想深入研究的函数我们可以F11介入一探究竟,但如果一直F11的话可能会一直深入程序底层可能按不出来哦!另外,对于printf这种库函数,如果还按F11的话,由于printf已经编译好,只能看到printf的汇编语句。所以大家还是根据情况按F10还是F11哦!

 

由于大家在实际的开发工作当中,程序往往比我们的例子程序复杂很多,比如多个函数、嵌套、库函数调用等等,也有误进入函数内部,或者已经排查没有问题的,如果想尽早结束此函数退出回到上一层调用处,如何实现呢?答案是:按shift+F11,既可以跳出函数,返回到当前断点函数调用的下一步。

好的,讲到这里,大家请自行实验,熟练掌握F10和F11以及shift+F11的混合使用!

请大家亲自上机实验!

 

以上


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)