• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

VC6断点调试技巧<第二篇>

C语言研究中心 CTO 17612次浏览 5个评论

在第一篇中,我们为大家介绍了如何用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的混合使用!

请大家亲自上机实验!

 

以上

C语言网提供「C语言、C++、算法竞赛」在线课程,全部由资深研发工程师或ACM金牌大佬亲授课,更科学、全面的课程体系,以在线视频+在线评测的学习模式学习,学练同步,拒绝理论派,真正学会编程!还有奖学金等增值福利等你!

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明VC6断点调试技巧<第二篇>
喜欢 (79)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
(5)个小伙伴在吐槽
  1. 有大佬知道把这个程序装在系统盘下和装在其他盘是不是不一样啊,我的装在了非系统盘内,老是跳出弹窗无法正常进行调试,求大佬告知
    SRTNT2019-04-17 17:30 回复
    • 同问+1
      阿喵2020-04-28 16:38 回复
    • 当时上课老师还要求我们不装在系统盘里呢,它承受了太多
      大涵2020-06-19 15:31 回复
  2. 第一句 include应该加上吧,要不然无法组立的
    红莲2020-07-15 15:02 回复
  3. 第一句include需要加上
    珈青凌2020-12-23 09:17 回复