现场调试:确保系统可用的同时诊断软件故障

2011-11-03 10:05:28 来源:电子系统设计

摘要:  现代嵌入式系统中可能有数百种软件在运行,所有这些软件都会共享系统资源并以复杂的方式交互。这种复杂性会影响系统的可靠性,简单来说,系统包含的代码越多,出现编码错误的可能性就越大。(据估计,一个百万行的代码中至少会有一千个漏洞,即使该代码经过系统的开发和测试。)编码错误还会影响系统安全,因为黑客常常会利用它们作为恶意攻击的突破口。

关键字:  嵌入式系统,  共享系统资源,  编码错误,  诊断系统

现代$中可能有数百种软件在运行,所有这些软件都会共享系统资源并以复杂的方式交互。这种复杂性会影响系统的可靠性,简单来说,系统包含的代码越多,出现编码错误的可能性就越大。(据估计,一个百万行的代码中至少会有一千个漏洞,即使该代码经过系统的开发和测试。)编码错误还会影响系统安全,因为黑客常常会利用它们作为恶意攻击的突破口。

不管进行多少次测试都无法完全消除这些软件漏洞和安全漏洞,因为没有任何测试套件能预测复杂的软件系统可能遇到的所有情况。因此,系统设计人员和软件开发人员必须保持“任务关键意识”,采用能遏制软件错误的软件架构,使其从故障中迅速恢复。同样重要的是,开发人员必须使用工具和调试技术,以在排除故障的过程中确保系统的完整性。调试工具不能对系统运行产生不利或未知的影响,特别是当系统正在为用户提供服务时。一旦开发人员修复软件组件,工具和底层操作系统应便于上载和监视修复的版本,同样不会影响系统的整体运行和可用性。

通过跟踪系统深入观察

当复杂的软件系统运行缓慢或异常时,如果任务不是非常大的话,可利用系统交互的总数查找故障原因。例如,有几十个或上百个线程在多处理器或多核系统中运行和交互,其中一个线程意外中断,这一故障是哪个事件或交互导致的呢?不使用工具查看整个系统的话,原因可能归咎于系统的某个部分,但事实上,故障点位于其他地方。

传统调试工具在诊断系统时,通常以侵入的方式改变其运行,因而使事态更加复杂。例如,源代码调试程序会终止调试中的程序而不是整个系统,因而会改变系统的运行顺序。这种现象通常称为探测影响——它会暂时掩盖竞争状态,而且会引入只在进行调试时才会出现的“错误”。

当然,传统的源代码调试工具和应用程序剖析工具对目前复杂的多处理器、多语言系统而言仍很重要。但只有在开发人员确定需要修复哪个组件或组件集合时,它们才会发挥作用。为此,开发人员必须首先理解系统是如何以整体方式运行的。例如,在多核系统中,开发人员必须能确定哪个内核在交换信息,它是以什么顺序进行交换的。开发人员还须识别参与每次内核间事务的是哪些处理器或线程,并跟踪内核间的执行路径。

本文为哔哥哔特资讯原创文章,未经允许和授权,不得转载,否则将严格追究法律责任;
Big-Bit 商务网

请使用微信扫码登陆

x
凌鸥学园天地 广告