最近用VS2008开发了一套工控系统,控制生产线的运行,其中主要用到了COM、串口、网络、多线程技术。
但是程序一直存在一个bug,会导致应用程序崩溃,而且是毫无征兆的崩溃,我生成了debug版本在机器上运行,程序崩溃的时候,没有出现任何提示,窗口直接关闭(进程也崩溃了)。
我设置了windbg自动转储,可是,程序崩溃的时候,系统根本没有启动windbg,也就是说系统也没有捕捉到程序的异常。
我想请教各位,什么样的异常会产生这样的效果(程序直接崩溃,没有弹出框)?
多谢了,各位。
------解决方案--------------------
指针操作越界或者是资源访问冲突。
------解决方案--------------------
数组越界不一定总能触发异常,比如:
int main()
{
int a[10];
int b[10];
b[0]=1;
for(int i=0;i<=10;++i) a[i]=0;
return b[0];
}
for中a数组可能会越界到b中,但由于b数组的内存还是属于进程的,不会触发异常,
但程序的结果显然是错误的.
如果你觉得完全不知如何下手,就多下断言,总能触发到断言的.
------解决方案--------------------
看能不能复现bug,找出Bug出现的规律。
另外多用断言,可以每个函数的开头和结尾都直接输出函数名__FILE__ __LINE__
这样bug一旦出现就可以知道在哪个函数里出了问题,然后就找出Bug了
另外建议,每个模块测试好了再组装。
------解决方案--------------------
看能不能复现bug,找出Bug出现的规律。
另外多用断言,可以每个函数的开头和结尾都直接输出函数名__FILE__ __LINE__
这样bug一旦出现就可以知道在哪个函数里出了问题,然后就找出Bug了
另外建议,每个模块测试好了再组装。
------解决方案--------------------
单测试没问题 一个一个模块加 找到那个异常模块