运用GDB进行UT/ST的小经验

用惯了VC/Eclipse图形化的程序调试界面后,要适应GDB这种“回归淳朴”的命令行方式,确实需要一些时间。不过当你熟悉了GDB的高级用法后,才能真正体会到程序调试那种随心所欲,尽在掌握的酣畅感。

最近一段时间用GDB作代码测试,积累了一些小小经验,希望对尚未熟悉GDB的朋友有所帮助。(本文以C语言为例说明相应的用法,其它语言可参考GDB帮助文档中对其的支持说明)

业界比较专业的UT(Unit Test,单元测试)工具很多,所以通常不必直接用GDB进行UT,但使用这些专业工具前往往需要花大力气配置环境,编译驱动等,若对于一个小项目,则比直接使用GDB作UT麻烦多了。所以,小项目往往可以借助GDB进行UT/ST合一的测试,效率提升是非常可观的。

ST(System Test,系统测试)一般需要尽可能的逼近实际运行环境,所以应尽量避免或减少对代码有直接介入的工具。这时以GDB作为测试/调试手段就非常实用了。

继续阅读运用GDB进行UT/ST的小经验

当PC-Lint遇上Symbian

PC-Lint是一款强大的C/C++程序检查工具,毫不夸张地说,如果编译器能为你发现20%的程序缺陷,那么PC-Lint至少还能为你发现余下的65%。(最后15%还是留给你自己去排查吧,机器始终是无法取代人脑的~)

可是,当PC-Lint遇上Symbian,就像那法力无边的如来佛遇上了刁钻难缠的孙悟空,也常常拿它没有办法。如今咱可是和谐社会了,怎么说也不能一怒之下就将孙猴儿打下五指山,落的个百年不得翻身吧。为了让两位大爷和平共处,我这观世音也只好费力的来调解调解了。

首先,在下面的地址取得Symbian官方提供的Lint配置文件:
http://www.symbian.com/developer/techlib/v9.2docs/doc_source/faqsdk/faq_0449.html
(如果官方的链接无法下载,请[点击这里]下载其副本)

借助官方的配置文件,PC-Lint已经能够识别大部分的Symbian程序代码。但实践中遇到的一些Lint提示仍然是这份97年之后再也没更新过的配置文件所能应付的。在这里,我补充一些自己总结的额外规则,提供给大家参考:

-D_UNICODE

-e1774			// Disable dynamic_cast
-emacro(717, *)		// Ignore do{...} while(0) in macros
-emacro(???, _LIT)
-emacro(???, _L)
-function( exit, User::Leave, User::LeaveNoMemory )
-function( __assert, User::LeaveIfError )

至于TRAP/TRAPD所产生的“Warning 655”,始终未能找到有效的消除方法。(当然,最坏的情况下你也可以加上括号以迁就PC-Lint的智商……)

eMule发布0.48a,支持Vista和UPnP

藉此五周年生日之际,eMule发布了新版本0.48a。[官方下载链接]

此时此境,这个版本首当其冲的更新无非是与Vista的兼容了,按照作者的说法,基本不需要作特别的设置即可在Vista下正常使用。因为我还没升级到Vista,所以也无从测试兼容性,不过建议大家还是看看官方的Vista兼容指南

另一个重要的新特性便是对UPnP的支持,特别关注了一下详细的版本更新记录,发现在0.84的数个beta版本中,eMule对UPnP的支持进行了不少的改进,还特别针对ADSL作了优化。所以,广大ADSL路由(支持UPnP)上网的朋友千万不要错过这个版本哦!因为我用的是电信的LAN独立接入,所以这个新特性仍然体验不到…… =_=!

Nokia Carbide.C++ 1.2

Nokia终于推出了新版本的Carbide.C++,今天装上试用了一下,感觉变化真的非常大。

首先是兼容性的改善,1.2版终于可以正常导入并识别Symbian 9的mmp格式,不必像1.1中导入之后还得手动修改大量的编译设置。我在导入FontRouter2之后,没有碰到任何障碍,一次编译成功!

其次是速度的优化,虽然Java故有的性能问题并没有得到明显改善,但编译、Index和启动模拟器的速度则有较大幅度的提升,终于不用忍受每次编译时的漫长等待了。

其它改善还在摸索中,总的来说1.1版给人的印象顶多算是一个充斥着bug的pre-Beta版本,而1.2才终于让人觉得稳重了一些。 (:

Symbian OS v9.5 —— 效率与性能的结合

Symbian OS v9.5,这是一个有违Symbian版本传统的版本。过往的Symbian主版本中,次版本号也最多只发展到2,而Symbian 9却出现了9.0、9.1、9.2、9.3和9.5。就9.5所带来的变化而言,足堪以10.0的版本号,但Symbian似乎对9系列越来越有信心,以至于新版本仍然留念于9。

Symbian 9.5的最大改进是性能。通过引入多种桌面操作系统中流行的性能优化技术,Symbian OS的性能得以大幅度的改善,因而在不久的将来,我们也必将看到越来越多的低端手机开始采用Symbian OS。

  •  按需载入页面(Demand Paging)。想必大家早已对智能手机的系统启动速度和应用程序启动速度深有体会了,“按需载入页面”可以明显改善这一用户体验。在首次启动时仅仅载入必须的代码段,其它部分延后载入直到有页面访问请求。在Linux下,这一技术早已得到广泛的应用,内核通过异常机制捕获到“Page Fault”时再加载相应的页面。
  • 文件缓存(File Server Caching)。在桌面系统中早已司空见惯的一项重要性能优化技术,直到此时才引入Symbian,显然是有其特殊的历史原因。在桌面系统中,内部和外部存储的性能往往有天壤之别,所以“缓存”在很早的阶段便被引入操作系统和应用程序,以提升外部存储的访问性能。但初期的手机系统中,内部存储和外部存储(对手机而言,称为“内部持久存储”更恰当)的性能并没有那么大的差别,所以“缓存”可能并不能带来明显的性能提升,甚至反而浪费了CPU的运算时间。Symbian 9.5所引入的文件缓存技术也仅仅是一个面向应用的可选接口,主要用于“数据存取敏感”型的应用(对它们来说,微小的性能提升也能积少成多)和“存储频繁”的应用(延长Flash的寿命)。
  • 内存碎片整理(RAM Defragmentation)。也许你会很惊讶于Symbian作为一个支持分页的操作系统竟然长久以来都没有提供内存碎片整理功能。得益于Symbian本身优化的内存管理和高度受限的内存使用原则,内存碎片其实并不会对手机系统的性能和内存使用率造成明显的影响,而自动的内存整理反而会浪费宝贵的电池能量。事实上,Symbian确实提供了手动的内存“压缩”功能(可以看作是一个简化版的内存整理),不过只能通过第三方工具软件触发。Symbian 9.5之所以引入“自动”的内存碎片整理,一个重要的促成原因是:目前手机终端所采用的内存容量变得越来越大,内存的能耗已经不容忽视。在新版本中,借助内存碎片整理,连续的空闲物理内存块可以被关闭以节约能耗,当然它也同时提供了其它在主流操作系统中所体现的改进:更高效的内存访问和更大的空闲可用内存。

(待续……)