课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
软件异常问题是程序员在维护软件系统的时候会经常遇到的一个问题,而本文我们就通过案例分析来简单了解一下,常见的软件异常问题都有哪些。
常见的软件异常有内存越界、内存访问违例、stackoverflow线程栈溢出、空指针与野指针、死循环、死锁、内存泄露、GDI对象泄露、函数调用约定不一致导致的栈不平衡等。
有的异常会立即导致软件崩溃。有的异常在运行一段时间或者长时间运行后才会导致崩溃,比如内存泄露和GDI对象泄露。有的异常并不会导致崩溃,只会导致软件发生堵塞或卡死,比如死循环和死锁。
还有一类问题会导致业务代码执行上的异常,这类问题不会导致软件崩溃,会导致业务代码没有按照正常逻辑或者分支被执行,导致业务逻辑出异常。比如函数抛出异常导致部分代码被跳过,即该执行的代码没有执行到,导致后续业务代码执行时出现逻辑异常。正常情况下,这些被跳过的代码会执行一些判断,会设置一些变量的值,会直接影响后续代码的判断与执行逻辑,所以会导致后续代码在运行时出现业务逻辑上的异常。这样的问题我们以前遇到过几次。
再比如系统API函数的lasterror被覆盖,导致后续判断lasterror值的条件判断出现逻辑上的错误,即产生了误判。这个问题我们以前也遇到过,在libjingle库的开源代码中添加了一个打印,因为开源代码的接口封装的层次比较深,导致我们在添加日志打印的代码时没看出会把lasterror值覆盖的问题。具体的是,添加的那句打印日志的代码中调用系统API函数,该行打印日志的代码执行完后就会把其前一句的开源库代码产生的lasterror值给覆盖了。而在打印日志下面的下一句开源代码中的接口内部会判断上一句开源代码执行后的lasterror值,因为该lasterror值被覆盖了,所以导致对lasterror的判断条件出现误判,导致后续的业务代码出现了逻辑上的异常。
对于GDI对象泄露,是使用GDI对象去绘制窗口导致的,绘制操作执行完后没有去释放GDI对象。GDI对象包括Pen画笔、Brush画刷、BItmap位图、Font字体、DC设备上下文、Region区域等。程序中如果有GDI对象泄露,不会立即导致异常或崩溃,当程序进程的GDI对象总量达到10000个左右时就会出现异常,出现闪退崩溃。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。