catch Floating point expection

今天板上测试,经常出现浮点异常导致的重启。分析原因:捕捉到信号SIGFPE(8)的异常,指的是浮点异常或除数为0导致。

模拟测试如下:出现异常和板上异常一致,99%可能因为除数0导致

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 #include <signal.h>
 4 #include <string.h>
 5 #include <unistd.h>
 6 
 7 void signalHandle( int signalNo)
 8 {
 9     printf("catch %s, %d\n",strsignal(signalNo),signalNo);
10     exit(-1);
11 }
12 
13 const int a[]={SIGHUP,SIGINT,SIGQUIT,SIGILL,SIGTRAP,SIGABRT,SIGFPE,SIGKILL};
14 int main()
15 {
16     printf("start !\n");
17 
18     for(unsigned int i=0; i<sizeof(a)/sizeof(int); i++)
19     {
20         signal(a[i],signalHandle);
21     }
22 
23     int i,j,sum;
24     sum=0;
25     j=0;
26     i=6;
27     sum = i/j;
28 
29     for(;;);
30 
31         return 0;
32 }

运行结果:

catch floating point expection, 8

需检查代码的除法运算
posted @ 2015-02-11 23:35  海阔天空84  阅读(114)  评论(0编辑  收藏  举报