各抒己见,如何保证程序的坚挺
程序的稳定性
尤其是对于服务器程序,太太重要了
保证这些长时间运行的程序的稳定性,确实是件不容易的事情
由于程序屡屡被未知的异常击溃,以致于现在只有这么一招:
catch(...)
{
}
后来内存管理逐渐成熟, 程序不知不觉退出的事情少了很多
但偶尔仍会莫明其妙的崩溃
以致于加了一招:
狗,用狗监视程序的运行
由于这种办法太低劣,以致于自己看着都恶心
稳定难,难于上青天
大家都来谈谈提高程序稳定性的心得,畅所欲言
ps:有没有专门介绍这方面的书呢?????
[解决办法]
建议你看“测试驱动”这种开发方法。
故障没找到根源,靠防是不行的。
[解决办法]
良好的编程风格 周密的异常处理机制 代码追求简单实用 严格实行单元测试 大规模的软件测试 = 健壮的产品 似乎没有更好的办法了
[解决办法]
1、程序中使用catch,但C++又不同于Java,可多异常没有办法捕获,况且对于内存操作,只越界一个字节的时候,有时也没有异常,但执行一段时间就出现了错误,这是比较郁闷的。
2、内存操作错误,这是比较常见的。
3、程序中使用了违法MFC断言的情况,这种情况出现在DEBUG版本下,不过Release下程序可能直接就挂了,所以需要处理这种断言。
我在程序中的处理方式:
1、使用VC++带的处理断言的方式,然后添加处理函数,输出错误信息,然后输出程序的调用堆栈的内容。然后分析输出的是断言还是其他的错误,如果是断言,则可以知道调用了什么样的断言,然后通过调用堆栈分析查找到相应的错误。其他的则直接看调用堆栈。
2、使用其他书上介绍的东西:如环形程序记录,记录程序的运行情况,然后重点查找相应的错误。
3、对于变量初始化就赋值是一个比较好的习惯。
4、对于指针,一定要判断是否为空,并且要防止出现野指针的情况。
[解决办法]
任何细节,设计优先。管理内存有管理内存的 policy,管理资源有管理资源的 policy
[解决办法]
C++中的异常机制确实不够彻底,比如最简单的除0操作,Java中是抛出异常,C++中似乎是直接中断。
java的除0,是虚拟机在执行
C++中的除0,是cpu在执行,跟c++的异常机制没有任何关系
[解决办法]
处理异常的代码量所占比重,和代码的健壮性成反比.
你的异常处理时机都合适吗?
[解决办法]
我们的做法是进行大量的错误检查,检查进入函数的每一个参数,以及判断函数是否合法的返回。在程序中大量的使用断言,其目的,不让任何非法数据有机会入侵到我们的程序。
这些还是指标不治本,个人决定编写良好的编码习惯和提高代码质量才能够进一步的增加程序
的健壮行。比较编写简介易于理解的代码,简化子函数代码的长度,这方面还是看代码大全比较全面。
[解决办法]
個人感覺,不可能完全避免,特別是在WINDOWS平臺下面。
想達到預想的程度,小心、小心、再小心,是必不可少的。
——這樣的要求非常顯出編程者的重要性!
[解决办法]
测试测试还是测试,进行充分的单元测试、系统测试,异常情况一定要充分考虑
[解决办法]
错在哪里都不知道,怎么重现都不知道。你们怎么做的开发和测试。还是server。
[解决办法]
C++中的异常机制确实不够彻底,比如最简单的除0操作,Java中是抛出异常,C++中似乎是直接中断。
java的除0,是虚拟机在执行
C++中的除0,是cpu在执行,跟c++的异常机制没有任何关系
在Windows下面对于除0之类的异常是由SEH处理的,而且SEH也可以转化成C++异常
Linux下面则是由signal来处理的,当然也可以转化成C++异常
[解决办法]
unix下的c++编程主要靠细心,要反复测试,初期一不小心就会出现code dumped之类的错误,主要集中在内存未释放,访问越界,内存未释放问题比较严重,而且不好定位。编程习惯也比较重要,最好自己定义的变量都进行初始化。如果用到第三方库,请仔细阅读文档,并做好单元测试。线程函数要进行catch,绝对不能向外抛异常。