产品概述
在嵌入式实时软件的开发过程中,开发团队通常要花费50%~70%的时间来查找和修正软件错误,特别是那些随机发生的故障。这类随机故障中常见的有:
· 缓冲溢出:由于在错误的内存位置写入数据而引起,它导致系统在相当长的一段时间之后在一个不相关的地方崩溃。
· 资源和内存泄漏:项目分配了某些资源,但没再使用它,也没有把它标记为空闲。这样系统的运行就会慢慢地缺少了资源。
· 死锁:两个或多个任务同时互相等待对方,造成系统故障。
· 异常:通常是由前面几种故障或逻辑问题引起的。
问题在于,使用标准的调试工具很难定位和修正这些故障,因为这要求开发者在故障发生之前就知道在哪里搜索故障。这些调试工具还有一些其他的限制,比如,用户只能看到目标机上的少量内存段、只能用在开发阶段。
作为一个软件调试工具,SMA(Smart Memory Analyzer)可以极其快速和有效地定位软件随机故障的来源,它在故障首次发生几小时之内就能准确定位。这是因为它采用一种不同寻常的手段来发现故障:
(1) 当嵌入式系统中的一致性检查检测到系统处于不稳定状态时,SMA的“online”部分就被触发,从而记录下当时系统的整个状态。
(2) 系统的状态被保存在一块独立的存储区域中,之后作为一个文件传递给开发主机。
(3) SMA的“offline”部分自动分析该文件,给用户呈现系统状态的细节,这些信息覆盖了系统的任何内容。这些可以直接读懂的系统细节就可以帮助开发人员定位系统故障。
SMA不同于其他调试工具的独特能力在于,它能够对系统状态进行分析和建立交叉参考,从而可以显示操作系统管理的所有对象(即,任务、信号量、看门狗、消息队列……)。
SMA还执行了大量的自动检测,对实时系统中可能产生的任何问题给出警告。利用SMA,系统工程师可以设计和控制每个系统资源的准确分配和使用。对比其他的调试工具,SMA对实时系统行为没有任何影响,它只在故障产生之后才触发运行。
SMA针对VxWorks实时系统。
功能特点
· 以图形方式显示输出,可以保存成ASCII文件
· 显示包括类型定义、结构、联合、向量和枚举在内的所有全局变量
· 显示所有系统任务及其状态,包括:整个TCB状态,任务堆栈和调用堆栈
· 显示所有活跃的看门狗以及处于延时状态的任务,记录详细状态
· 显示所有消息队列,显示它们的完整状态,包括消息数据
· 显示所有信号量:三种(二进制、互斥、计数)信号量及其状态和拥有者
· 显示所有partition当中的碎片状态
· 显示所有空闲内存区域、观察分配的内存块、观察内存分配的丢失情况(内存泄漏)
· 显示所有文件描述符和套接字
· 显示SNMP树
· 搜集所有错误与警告
· 显示环形缓冲的状态
· 显示网络缓冲的状态
· 显示netJob向量调用(挂起的和已完成的)
· 计算由任务占据的CPU负载,列出系统崩溃前的最后切换的任务
· 自动检查大量的常用编程错误,并在需要时给出警告,有以下情形:
1)对复制的声明(不同类型带有相同的名字);
2)只读区域在运行中被改写时给出警告;
3)中断向量表之类的特殊内存区域在运行时被偶然改写;
4)任务使用了超过其堆栈的90%;
5)检测到任何partition中任意段发生内存泄漏时;
6)检测到任何partition中任意段发生缓存溢出时;
7)检测到任何网络缓存中任意cluster发生内存泄漏时;
8)检测到任何网络缓存中任意cluster发生缓存溢出时;
9)检测到任何网络缓存中发生任意MBLK泄漏时;
10)任何消息队列的发送计时器的延时不等于0时。
· 唯一对VxWorks系统内存映像进行分析后转换成可读信息并可以进行交叉索引的工具
· 精确定位难以调试的随机软件故障
内存映像分析所提供的信息使得开发者可以很轻易地定位到那些即使是比较罕见复杂的软件故障,而且通常在它们发生的第一次后就能发现。
· 加速开发过程
软件故障发生时,SMA为开发者提供了详细可读的系统状态。这些信息帮助开发者在几小时之内就能定位和修正错误,而不是往常那样需要花费几天甚至几周的时间。
· 减少开发投资
SMA缩短了嵌入式软件开发的周期,也因此减少了开发投资。
· 增加软件可靠性
通常来讲,使用了SMA,那么故障发生的第一次也是它发生的最后一次。在减少开发投资的同时,也增加了软件的可靠性。
· 软件工程过程的新视角
SMA详细、准确、可读地描述了系统状态,它为系统工程师提供了新的视角,使其在看待系统整体时不会漏失具体细节。
· 内存映像可以单独地离线分析,不受地点和时间的限制。
支持平台与性能
· 目标操作系统:VxWorks 5.x以上
· 目标系统的内存:1GByte
· 空闲代码段:48KByte
· 空闲数据段:320KByte(对小系统来说,48KByte)
· 内存存储区域的大小:通常小于系统RAM的10%
· 支持的调试信息格式:STABS、DWARF1、DWARF2
· 获取内存映像的手段:ASCII或二进制文件、使用控制台端口或FTP/TFTP
· 适用的处理器包括:x86、ARM、MIPS、Power PC
· 适用的编译器包括:GNU、DIAB、ADA98
· 主机平台:Windows 2000以上