美章网 资料文库 软件跟踪技术系统的有效性范文

软件跟踪技术系统的有效性范文

本站小编为你精心准备了软件跟踪技术系统的有效性参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

软件跟踪技术系统的有效性

DBX调试技术

dbx是一个交互式源码级命令行调试工具。可用它以可控方式运行程序并检查已停止程序的状态。dbx使您能够完全控制程序的动态执行过程,包括收集性能和内存使用数据、监视内存访问及检测内存泄漏。可使用dbx调试由C、C++或Fortran语言编写的应用程序。

Truss动态跟踪调试技术

在UNIX操作系统中,当日志无法提供帮助时,可以使用truss来查看应用程序的运行情况,跟踪显示应用程序对外部库和内核的调用情况。应用程序通过这些调用来访问网络、文件系统及显示。通过观察这些调用及其结果,可以了解应用程序需要什么,并由此找到解决方案。下面重点对truss动态跟踪调试技术进行了研究。

动态跟踪调试方法

1信号量互锁引起程序挂起的跟踪技术

在UNIX系统中,系统内部的信息都采用内存访问的方式传输,这就必然会用到信号量的锁机制。对锁机制的使用,很有可能出现互锁的情况。此时,应用程序并没有死掉,只是挂起了而没有退出,也不会产生核心文件core,不能使用dbx进行调试。这种行为通常是两个进程争用一个信号量锁,引起死锁。此时,用truss进行程序的跟踪调试,就可以很快找出问题的原因。例如执行一个程序,该程序正常情况下是需要通过内存进行接收消息的,并且是阻塞方式。在正常情况下显示如下信息最后一个调用,semop(),因为函数发生了阻塞,所以被标记为sleeping。这意味着该函数正在等待某个事件的发生,并且内核将这个进程置于睡眠状态,直到发生了相应事件。查看semop()函数,发现是信号量锁机制的函数,经过进一步地分析,因为收发程序的锁没有控制好,被锁死引起的,关闭发送程序后,程序就可以正常运行了。通过使用truss跟踪调试,可以很快找出信号量互锁引起程序挂起的情况,同时也可以快速查找两个进程争用一个文件锁的问题。这就需要在平时的调试中积累经验。

2文件权限引起程序故障的跟踪技术

还有一种对于文件权限,开发人员并不注意,经常出现文件不能打开或者不能访问的情况。如果开发人员再忘记检查函数的结果,那检查问题的所在就比较困难,但使用truss可以很方便地找到问题。例如,下面是一个应用程序在打开操作失败时的输出:可以发现以open("/etc/nodename"...开始的一行,该行不仅看起来相关,并且还返回了错误Err#13EACCES。对/etc/nodename进行查看,则将显示该用户没有读取这个文件的权限。使用chmod命令来更改权限,该程序就可以正常地运行了。

3对正在运行的程序进行跟踪调试技术

当应用程序正在运行,刚开始的时候,其CPU占用率比较正常,在某个特定的时间,突然就增加到100%,而当程序重新启动后,又恢复正常,但运行一段时间后又出现了,此时使用truss,使用“-p”参数,调试正在运行的程序,可以快速地找到问题。通过man功能,还可以查看到truss还有其他参数,可以使用-t选项筛选系统调用。-e选项显示每个exec系统调用中环境变量的通过情况,-o可以输出到一个文件中,等等。

结束语

Truss命令是SolarisUNIX下的跟踪调试技术,在其他UNIX操作系统中,都提供了相似的跟踪命令。在Linux中,可以使用strace命令来执行跟踪,其他UNIX版本中的应用程序跟踪可能使用ptrace和ktrace等。当常规的程序调试方法失效时,用这些跟踪调试技术是有效的排除故障的方法,可以观察到程序对系统的所有调用。通过观察这些调用及其结果,由此找到解决方案。

作者:李璋静单位:中国电子科技集团公司第二十八研究所