重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
单步调试是指程序开发中,为了找到程序的bug,通常采用的一种调试手段,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。
三原网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联公司公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
解决这个问题的方法如下:
1、首先需要设置断点的那一行代码的最前面点击下,就会出现一个红色的圆球,代表设置断点成功,下图一共设置了4个断点。
2、设置断点完成之后,按下F5,开始断点调试,断点走到的位置,会在红色圆球上添加一个黄色箭头。
3、继续按下F5, 程序会往下执行,走到下一个断点的时候停止。
4、继续按下F5,当设置的断点不满足条件的时候,不会走进去,而是继续执行,跳到下一个断点。
5、另外,当走到某个断点处,可以实时更改当前变量的值。
6、当不需要单步调试的时候,点击下图标示的图标,可以删除所有的断点。
7、删掉之后,红色圆点消失,这样问题就解决了。
单步调试过程中,如果要跳出本次循环,只能在循环外语句设置一个断点,然后执行运行命令,这样调试工具就会开始运行程序,直到遇到断点后暂停,从而达到跳出循环的效果。
具体如何设置断点,与编译器及调试工具相关,不做列举,可以查阅调试工具的帮助文档。
这种方法需要注意以下两点:
1 如果在循环中,存在指向循环外的goto语句,return语句,以及exit()调用等,这类语句属于循环非正常退出点,调试时需要同时在对应语句位置下断点。
2 如果循环可能为死循环,那么就会永远无法跳出循环,如果在运行后长期无法执行到断点,就需要检查是否为这种情况了。
函数都是并列关系,不存在一个嵌套另一个的问题,只能是一个调用另一个,在其中又调用另一个,一层层调用,正常情况都只有一个返回出口,也是一层一层返回,不能跳过。
程序中途跳出,和结束是两个不同的概念。
1 要使程序中途跳出,可以使用return语句,跳出该函数。
如
int fun(int n)
{
int i;
if(n0) return -1;// 在n为负数下,提前退出该函数。
//执行正常功能。
for(i=0;in;i++)
printf("%d ", i);
}
2 要使程序提前结束, 可以调用exit()函数。
如
int fun(int n)
{
int i;
if(n0) exit(-1);// 在n为负数下,提前结束程序。
//执行正常功能。
for(i=0;in;i++)
printf("%d ", i);
}
3 二者区别:
a) 使用exit函数,会结束整个程序。 而使用return只是结束当前函数,还会到主调函数处继续运行。
b) 在main函数中使用return语句,等效于调用exit函数,同样会结束程序。
c) 调用exit函数时,需要引用头文件stdlib.h。
可以使用fseek函数,直接偏移指针的指向位置到第二行。
函数原型
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
可以使用fgets函数,遇到需要跳过的行时,直接读取该行并弃舍该行字符值。
函数原型
char *fgets(char *buf, int bufsize, FILE *stream);
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
应该是已经走了。
但是你Keyscan后就调用另外两个函数。而两个函数也没有个执行的显示,所以看上去就象是一直在执行keyscan函数一样。
而且你的while(1)这个执行条件,一直就是真。所以,你这个程序,首先是无法跳出循环。
第二,循环肯定是已经执行了另外两个方法,但是因为你的两个函数没有输出提示,所以你误以为没有执行。
建立你在两个函数里用两个输出语句,你就可以看到,你的这两个函数实际已经执行了。