最近调试一处程序,花了好几天。症状是程序总是莫名其秒的退出。
后来发现进程退出,返回到了其父进程中。
程序调试环境非常的差,改一下程序就要重新写入flash,还要把信息打印到屏上看程序状态。
慢慢的缩小范围,把错误定格在了一个线程里,原以为是线程的处理有问题,害的浪费了好多时间。最后发现线程里面有一句除法运算,针对这句屏蔽一下,果然不出错了。
C里除数为0时,程序是会出现异常的,而在Linux下,是不会对这种异常做修复性处理,而是直接的退出当前进程。
写些测试函数
#include <stdio.h>
#define EXIT_SUCCESS 0
int
main (int argc, char *argv[])
{
int a, b, c;
a = 5;
b = 0;
c = a / b;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return EXIT_SUCCESS;
}
-------------------------------------程序输出结果:
浮点数例外 |
上面的程序在c = a / b;这一句就退出了,没能输出后面的语句。
#include <stdio.h>
#define EXIT_SUCCESS 0
int
main (int argc, char *argv[])
{
float a, b, c;
a = 5.0;
b = 0.0;
c = a / b;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return EXIT_SUCCESS;
}
---------------------------------------输出结果:
5.000000 0.000000 inf
|
当除数为符点数时,即使其为0,程序也不会报错。inf可能表达无穷大之类的意思。现在还不敢确定。
阅读(2222) | 评论(0) | 转发(0) |