- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
现场调试:诊断软件故障的同时仍然确保系统的可用性
QNX 软件系统公司技术分析师
Paul Leroux
paull@
摘要
实际场用的软件 bug 不仅会导致系统运行异常、降低系统的可用性,还会给用户造成不便(甚至造成客户不开心而流失)。遗憾的是,传统调试方法本身就会干扰并影响系统的可用性、性能和正常运行。为此,本文为您介绍了一些调试方法和信息收集技术,以便在诊断过程中确保系统的可用性,帮助查找并解决软件故障。
简介
现代嵌入式系统中可能有数百个软件任务在运行,所有这些任务都会共享系统资源并以复杂的方式交互。这种复杂性会影响系统的可靠性,简单来说,系统包含的代码越多,出现编码错误的可能性就越大。(据估计,一个百万行的代码中至少会有一千个漏洞,即使该代码经过方法学的开发和测试。)编码错误还会影响系统安全,因为黑客常常会利用它们作为恶意攻击的突破口。
不管进行多少次测试都无法完全消除这些软件漏洞和安全漏洞,因为没有任何测试套件能预测复杂的软件系统可能遇到的运行情况。因此,系统设计人员和软件开发人员必须保持“任务关键意识”,采用能遏制软件错误的软件架构,使其从故障中迅速恢复。同样重要的是,开发人员必须使用工具和调试技术,以在排除故障的过程中确保系统的完整性。
调试工具不能对系统运行产生不利或未知的影响,特别是当系统正在为用户提供服务时。一旦开发人员修复软件组件,工具和底层操作系统应便于上载和监视修复的版本,同样不会影响系统的整体运行和可用性。
通过跟踪系统深入观察
当复杂的软件系统运行缓慢或异常时,利用系统交互的总数查找故障原因会是一项非常艰巨的任务。例如,
有几十个或上百个线程在多处理器或多核系统中运行和交互,其中一个线程意外中断,这一故障是哪个事件或交互导致的呢?不使用工具查看整个系统的话,原因可能归咎于系统的某个部分,但事实上,故障点位于其他地方。
传统调试工具在诊断系统时,通常以侵入的方式改变其运行,因而使事态更加复杂。例如,源代码调试程序会中止调试中的程序而不是整个系统,因而会改变系统的运行顺序。这种现象通常称为探测影响——它会暂时掩盖竞争状态,而且会引入只在进行调试时才会出现的“错误”。
当然,传统的源代码调试工具和应用程序剖析工具对目前复杂的多处理器、多语言系统仍很重要。但只有在开发人员确定需要修复哪个组件或组件集合时,它们才会发挥作用。为此,开发人员必须首先理解系统是如何以整体方式运行的。例如,在多核系统中,开发人员必须能确定哪个核在交换信息,它是以什么顺序进行交换的。开发人员还须识别参与每次核间交互的是哪些进程或线程,并跟踪核间跃迁的执行轨迹。
深入观察系统运行的关键途径是跟踪系统。系统跟踪涉及到很多工具和技术,其中包括:
负责标记程序进度的 printf() 调用
负责监视任务创建和跟踪资源使用的系统信息工具(例如,Unix top 命令)
实现应用程序剖析和代码覆盖的编译器驱动的检测技术
负责分析程序的内存使用历史和诊断故障(如内存泄漏、内存碎片过多)的内存跟踪工具
可在操作系统级别显示事件的内核级检测技术,可进行精确计时跟踪并显示多个进程与线程间复杂的交互
故障
技术
进程间通信 (IPC)
监视线程间的消息流。
瓶颈
资源竞争
监视状态更改的线程。
整体运行缓慢
查看 CPU 使用情况以识别消耗最多
CPU 周期的进程或线程。
搜索用户事件以确定导致延迟的线
中断等待时间过长
程,然后在该线程中插入自定义事件
以查找故障。
多核系统内的线程
监视在 CPU 间迁移的线程。
过度迁移
1 一些常见的故障以及开发人员如何使用系统剖析器进行故障诊断的说明。
试想,系统剖析器(一种可视化工具)成为 QNX? Momentics? 集成开发环境的一部分。与可在单独程序中跟踪线程间控制流的调试程序一样,这种工具能使开发人员“了解”系统内的不同组件是如何交互的,这些组件是全部在单独处理器上运行,还是在多个处理器上运行。如果出现故障,该工具能帮助确定事件发生的时间、涉及到的软件组件、这些组件的运行内容,更重要的是,如何解释事件。
在确保系统可用的同时深入观察
好的系统剖析器是非侵入式的;它无需修改代码即可允许用户观察,而且对系统运行的影响极小。如执行得当,开发人员就能借助它诊断实时系统的故障,而不会干扰系统提供的服务或使其性能减退。
为确保“非侵入性”,系统剖析器通常会快速、有选择地记录系统事件,包括信息、内核调用、线程状态更改和中断。不必修改用户编写的代码,因为这种事件记录可由经检测的内核执行。
以用于 QNX Neutrino?实时操作系统的经检测的内核为例,它不过是一种具有小型、事件收集模块的标准 QNX Neutrino 微内核。当被触发时,该模块会截获有关内核运行内容的信息,生成带有时间和 CPU 标
- 软件下载与安装、电脑疑难问题解决、office软件处理 + 关注
-
实名认证服务提供商
专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!
原创力文档


文档评论(0)