在第一篇中,我们为大家介绍了如何用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;这里设置一个断点,运行它,如图:
注意看到,黑框里什么都没有输出,并且下方的变量监视里i的值还是垃圾值,因为还未执行这句话。
然后我们F10下一步执行。但当大家执行到fun();函数调用这条语句时,编译器把它当成一句话来执行,并未进入函数内部,而是一步带过,如图:
大家可自行上机实验,可以发现F10单步执行的单步是以一条C语言语句为单位的。鉴于这种情况,当我们怀疑fun函数时如何调试呢?
除了可以在fun函数内部设置断点以外,我们还有一个办法,就是不按F10,而按F11,F11的意思是单步执行并介入,也就是说遇到单出的一句话就和F10没什么区别了,但如果是函数调用这种还能“进入”的语句,它就会逐层深入进去!大家能理解吗?
那我们来试一试,重新开始,回到程序一开始的断点处,在黄色箭头指向到fun()时,按F11,大家注意观察!
黄色的箭头会进入fun函数内部,如图:
然后可以逐步跟踪fun函数内部的语句了! 怎么样?试试吧
当然,这里提示一下,对于我们想深入研究的函数我们可以F11介入一探究竟,但如果一直F11的话可能会一直深入程序底层可能按不出来哦!另外,对于printf这种库函数,如果还按F11的话,由于printf已经编译好,只能看到printf的汇编语句。所以大家还是根据情况按F10还是F11哦!
由于大家在实际的开发工作当中,程序往往比我们的例子程序复杂很多,比如多个函数、嵌套、库函数调用等等,也有误进入函数内部,或者已经排查没有问题的,如果想尽早结束此函数退出回到上一层调用处,如何实现呢?答案是:按shift+F11,既可以跳出函数,返回到当前断点函数调用的下一步。
好的,讲到这里,大家请自行实验,熟练掌握F10和F11以及shift+F11的混合使用!
请大家亲自上机实验!
以上