使用strace,lstrace,truss来跟踪程序的运行过程
2010-06-03 14:11
337 查看
转载:
http://hi.baidu.com/phps/blog/item/84c44a4a5211a22608f7efc6.html
使用truss、strace或ltrace诊断软件问题
2008-07-05 16:25
http://hi.baidu.com/phps/blog/item/84c44a4a5211a22608f7efc6.html
使用truss、strace或ltrace诊断软件问题
2008-07-05 16:25
使用truss、strace或ltrace诊断软件问题进程无法启动,软件运行速度突然变慢,程序的"Segment Fault"等等都是让每个Unix系统用户头痛的问题,本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。truss和strace用来跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序,包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具;而strace最初是为SunOS系统编写的,ltrace最早出现在GNU/Debian Linux中。这两个工具现在也已被移植到了大部分Unix系统中,大多数Linux发行版都自带了strace和ltrace,而FreeBSD也可通过Ports安装它们。 你不仅可以从命令行调试一个新开始的程序,也可以把truss、strace或ltrace绑定到一个已有的PID上来调试一个正在运行的程序。三个调试工具的基本使用方法大体相同,下面仅介绍三者共有,而且是最常用的三个命令行参数:
举两个实例演示如何利用这三个调试工具诊断软件的"疑难杂症": 案例一:运行clint出现Segment Fault错误 操作系统:FreeBSD-5.2.1-release clint是一个C++静态源代码分析工具,通过Ports安装好之后,运行:
案例二:vim启动速度明显变慢 操作系统:FreeBSD-5.2.1-release vim版本为6.2.154,从命令行运行vim后,要等待近半分钟才能进入编辑界面,而且没有任何错误输出。仔细检查了.vimrc和所有的vim脚本都没有错误配置,在网上也找不到类似问题的解决办法,难不成要hacking source code?没有必要,用truss就能找到问题所在:
案例三:用调试工具掌握软件的工作原理 操作系统:Red Hat Linux 9.0 用调试工具实时跟踪软件的运行情况不仅是诊断软件"疑难杂症"的有效的手段,也可帮助我们理清软件的"脉络",即快速掌握软件的运行流程和工作原理,不失为一种学习源代码的辅助方法。下面这个案例展现了如何使用strace通过跟踪别的软件来"触发灵感",从而解决软件开发中的难题的。 大家都知道,在进程内打开一个文件,都有唯一一个文件描述符(fd:file descriptor)与这个文件对应。而本人在开发一个软件过程中遇到这样一个问题:已知一个fd ,如何获取这个fd所对应文件的完整路径?不管是Linux、FreeBSD或是其它Unix系统都没有提供这样的API,怎么办呢?我们换个角度思考:Unix下有没有什么软件可以获取进程打开了哪些文件?如果你经验足够丰富,很容易想到lsof,使用它既可以知道进程打开了哪些文件,也可以了解一个文件被哪个进程打开。好,我们用一个小程序来试验一下lsof,看它是如何获取进程打开了哪些文件。
lsof 显示进程打开的文件 lslk 显示进程锁定的文件 strace 调试及跟踪 , 对进程有 strace /truss 等 od 输出文件的内容 http://space.itpub.net/35489/viewspace-84293 |
相关文章推荐
- 使用strace,lstrace,truss来跟踪程序的运行过程
- 使用strace,lstrace,truss来跟踪程序的运行过程
- 使用strace,lstrace,truss来跟踪程序的运行过程
- 使用strace跟踪多进程程序
- 使用TKPROF工具进行跟踪ORACLE中程序运行状况
- 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
- strace调试跟踪程序运行状态
- 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
- 利用strace ltrace或truss跟踪程序的系统调用
- 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
- iOS AppDelegate程序生命运行过程及使用时机
- 跟踪法测试(灰盒测试):跟踪程序的运行过程,特别是输入数据的流转过程
- 使用strace和ltrace跟踪程序调用
- 程序执行过程的跟踪:(用debug来跟踪一个程序的运行过程) 整理总结
- 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
- 使用 Linux 的 strace 命令跟踪/调试程序的常用选项
- 使用strace 和 truss 来协助调试程序
- AndroidStudio使用过程中java类突然报红,但是程序可运行
- [MapReduce] mapreduce 编程向标准错误输出报告以跟踪Mapreduce程序运行过程中的中间信息
- msdn daovidw 程序运行过程(分割多视图,演示CTreeView和CListView的使用)