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
需检查代码的除法运算