欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

用户级软件重放工具Jockey研究

时间:2011-04-23  作者:秩名

论文导读:Jockey是一个用于调试Linux程序的工具,它通过共享库的方式链接到目标程序并实现对目标程序的记录与重放。目前的Jockey只能记录和重放命令行界面的Linux程序。与命令行界面程序完全不同的是,图形用户界面程序编程是由事件驱动。
关键词:重放,Jockey,XWindow系统,事件
 

1.引言

在软件调试过程中,由于软件中的很多错误难以简单再现使得查找这些错误成为一个相当具有挑战性的课题。如果我们能够将有错误的程序按照出错前的运行过程重新执行一遍,就能找到发生错误的断点,这为调试程序带来极大的帮助。Jockey是一个用于调试Linux程序的工具,它通过共享库的方式链接到目标程序并实现对目标程序的记录与重放。目前的Jockey只能记录和重放命令行界面的Linux程序。本文探讨尝试增加Jockey的部分功能模块,使其能记录和重放基于X Window图形用户界面(GUI)的Linux程序。传统的命令行界面程序编程使用系统调用,Jockey通过捕获系统调用来将程序行为记入日志文件,在重放时不需实际执行而只需从文件中直接读取日志信息即可。与命令行界面程序完全不同的是,图形用户界面程序编程是由事件驱动。我们在Jockey中增加捕获事件的功能模块,使其能够记录和重放程序的执行过程。

2.Jockey的简要介绍

2.1 Jockey的设计理念

Jockey记录下一个Linux程序原始的执行过程,然后确定性地重放刚才的过程。Jockey被设计用来帮助调试那些通过复杂的方式与操作系统或其他计算机进行通信的交互式或分布式程序。

传统的调试工具为调试程序中单个节点提供了全面的支持,但它们对于分布式或交互式程序却不那么有用。Jockey通过以下方法解决调试分布式或交互式程序中的三个关键问题:

首先,分布式和交互式程序的执行过程具有先天的不确定性。每个进程因与操作系统、用户或其他进程进行交互而使其自身行为产生分支。Jockey通过记录一个进程的执行过程来帮助调试这样的非确定性程序。

第二、分布式或交互式程序经常会运行很长时间,不是因为它们需要很多的资源,就是因为他们是服务器程序,或者它们需要与真实的用户进行交互。在这样的复杂环境下期望简单地重新产生与刚才相同的错误通常非常考验一个程序员的耐心。Jockey通过在执行过程中对进程状态进行快照的技术解决了这个问题。

第三、运行一个分布式系统需要在多机器上启动多个程序,而这不仅麻烦,而且会增加程序开发的周期时间。Jockey在运行完整个系统后可以记录和重放其中的一个单独的进程,程序员可以用一个传统的调试工具来调试每一个重放的进程。

2.2 Jockey的工作原理

当程序中某一函数调用了系统调用时,Jockey就会被启动,它重写该系统调用,交换栈指针,将程序指向它动态生成的代码中执行。若是在记录阶段,Jockey就再执行该原始系统调用,将返回值记入日志;若是在重放阶段,Jockey直接从日志中读取该值而不用实际执行原始的系统调用。

3.Jockey的修改

目前Jockey只能记录和重放命令行界面的软件,它最大的局限性是不能记录和处理事件。众所周知,图形用户界面的软件编程是基于事件驱动的,所以,我们要使Jockey能够记录和重放GUI软件就必须在Jockey中增加功能模块,使其能够记录事件中的信息,然后根据这些信息重放软件先前的执行过程。

3.1 X Window系统的事件

X Window系统是Client-Sever模式的。在任何鼠标驱动的视窗系统中,一个客户端必须准备对很多不同的事件进行响应。事件包括用户的输入和与其他应用程序的交互。事件驱动编程使得用户告诉程序做什么变得很自然。

需要处理事件是在视窗系统下编程和传统的Linux或PC编程的主要不同。X应用程序不用标准的C函数来获取输入。X程序接收事件,然后根据事件类型发生分支,执行适当的响应。传统程序是由程序控制,在确定的时间查询确定类型的输入。X程序绝大多数情况是由用户控制,在任何时间为任何类型事件的发生做好准备。事件在X程序编程中处于中心地位。客户端使用事件与服务器或其他客户端进行通信。

3.2 X Window对事件的处理

X Window中有很多函数产生事件。客户端对事件的处理过程分为三步:首先,选择每个视窗都需要的事件。论文格式。论文格式。然后,将视窗映射到屏幕上。论文格式。最后,当事件产生后,应用程序提供一个事件循环(Event Loop)来从事件队列中一一读取事件并处理之。

这个过程非常简单,唯一复杂的因素是各种事件可能同时发生,而且同一事件在不同的视窗发生可能具有不同的意义。所以我们必须要了解每个事件产生的特定环境来确保应用程序会采取正确的行为来处理它。

4.结论

我们用Xlib编写了一个程序作为简单的测试用例。在一个视窗的上半部分空白框中输入一句话,点击“确定”,下半部分的输出框中就显示刚才输入的那句话。在重放阶段,我们看到了以文字形式重放的刚才用户操作和程序执行的全过程。

这个简单的测试用例证明我们记录和重放GUI软件的方法是可行的。但是这个测试用例没有同时产生不同的事件来考验Jockey能否正确记录和重放更为复杂的情况。我们会用更多更大的测试用例不断地完善Jockey,使其真正成为一个可用的工具。并且,我们进一步的工作是将在下一个版本中以图形界面的方式重放GUI软件,使其效果更真实、更直观。


参考文献
[1]Yasushi Saito, Jockey:A user-space library for record-replay debugging, Technical Report, HP Laboratories,2005,1-9
[2]Adrian Nye, XlibProgramming Manual for Version 11 of the X Window System [M], Volume One, O’Reillyand Associates, Inc., Sebastopol, CA, 1994,179
[3]Robert Scheifler,James Gettys, X Window System [M], Digital Equipment, 2007,243-245
[4]赵智勇,李大鹏,软件重放技术研究综述[J],计算机应用研究,2008增刊,155
 

 

查看相关论文专题
加入收藏  打印本文
上一篇论文:用Mathematica7.0实现二维分形图
下一篇论文:有关Wi-Fi网络安全的十点建议
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文