错误处理(Error Handling)和清理(Cleanup)是Symbian OS至关重要的一部分。编写每行代码,或者是读到每行代码都会因为清理而受到影响。"清理是Symbian OS编程的基础。"
Symbian OS 错误处理和清理框架不仅仅只是对内存不足(OOM-out of memory)错误有用,很多操作如读写文件、通信会话中发送和接受数据的错误也可以处理,甚至用户的输入错误也能利用清理框架来处理。只有一种错误-编程错误,清理框架无法处理。但Symbian OS提供了足够的诊断信息,便于找出错误并修正错误。
Symbian OS 错误处理和清理框架不仅仅只是对内存不足(OOM-out of memory)错误有用,很多操作如读写文件、通信会话中发送和接受数据的错误也可以处理,甚至用户的输入错误也能利用清理框架来处理。只有一种错误-编程错误,清理框架无法处理。但Symbian OS提供了足够的诊断信息,便于找出错误并修正错误。
一、处理内存不足的错误
-
使用GUI框架提供的调试键(参考Sdk的Developer Library)
-
堆检查工具。通过嵌套使用_UHEAP_MARK和_UHEAP_MARKEND来检查分配的内存是否释放。注意只能用来debug
-
正确的销毁对象。用析构函数来销毁所拥有的对象
-
ELeave。使用New(ELeave)代替New()。但不能分配内存时则异常退出
-
在任何可能异常退出的函数名尾部加上L
-
异常捕获机制。TRAPD(error, FunL())捕获错误
-
清理栈(cleanup stack)。清理栈解决如下问题:对象在堆上分配的,但是指向它的指针却是自动变量。不要把成员变量推入清理栈。
-
两阶段构造。c++构造函数不应该包含任何可能异常退出的函数,对可能异常退出的构造使用ConstructL().
二、用户错误
常见的一种情形是处理用户输入的错误。在一个对话框中处理"ok"按钮的函数(一个改写的CEikDialog::OkToExitL())必须
-
从对话框控件中获得每个值
-
验证这些值
-
将这些值传给要执行某步操作的函数
OkToExitL()函数一个典型的编程模式就是在每个控件中,使用自动变量来包含T类型的值,或者指向一个C类型的值。
如果在OkToExitL()函数的处理过程中,在任意阶段发现非法内容,就需要
-
给用户显示一条消息,指出问题的所在
-
清理所有从对话框控件中提取的值,即在堆上分配的所有内容
-
返回
详细描述请参考Developer Library中Coding Idioms for Symbian OS.pdf一文。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126351/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-126351/