1 现象:问题描述
在某测试用例下,AIX机器下程序会异常退出,而Windows机器下不会。
2 关键过程:根本原因分析
在某测试用例下,引发程序Bug,对空指针进行操作。
但在Windows下,内存的异常访问可被try/catch捕获,而在Unix/Linux下不行。结果导致程序在Unix/Linux下与Windows下的表现不一致。
以下程序在Windows/HP Unix/AIX/Linux下测试,Windows下能打印出"error catched",其它操作系统下程序都会异常退出。
int main()
{
char *p = 0;
try{ *p = 1; }
catch(...)
{
cout << "error catched." << endl;
}
return 0;
}
3 结论:解决方案及效果
将try/catch去掉,并排除导致空指针访问的Bug,问题解决。
4 经验总结:预防措施和规范建议
没有必要的try/catch不要使用,它会导致问题定位困难、不同操作系统下表现不一致等问题。
5 备注
NA
6 考核点
在Windows下,内存的异常访问可被try/catch捕获,而在Unix下不行。
7 试题
以下说法正确的是(A)
A. Windows下try/catch可以捕捉内存的异常访问;
B. HP Unix下try/catch可以捕捉内存的异常访问;
C. AIX Unix下try/catch可以捕捉内存的异常访问;
D. Linix下try/catch可以捕捉内存的异常访问;
阅读(682) | 评论(0) | 转发(0) |