linux的strace命令(详解)

linux的strace命令(详解) strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 ### Linux的strace命令详解 #### 一、概述 `strace` 是一款非常强大的调试工具,主要用于追踪和诊断Linux程序中的系统调用与信号。它可以帮助开发者深入了解程序执行过程中的底层行为,对于定位和解决复杂的系统级问题具有不可替代的作用。 #### 二、基本功能 `strace` 的主要功能是显示所有由用户空间程序发出的系统调用。通过这些调用的参数以及返回值,可以了解到程序与操作系统交互的具体细节。`strace` 从内核中获取信息,因此无需对内核进行特殊配置或编译即可使用。 #### 三、常用选项详解 1. **-f** 或 **-F**:跟踪被跟踪进程的所有子进程。当一个被跟踪的进程调用 `fork()`、`vfork()` 或 `clone()` 创建新的进程时,`strace` 会继续跟踪新创建的进程。 2. **-o file**:将输出重定向到指定的文件中。默认情况下,`strace` 的输出是在标准错误输出(stderr)上打印的。使用 `-o` 选项可以将输出保存到文件中,便于后续分析。 3. **-e trace=list**:只跟踪特定的系统调用。例如 `-e execve` 只跟踪 `execve` 这个系统调用,这对于专注于某个特定系统调用的分析非常有用。 4. **-p pid**:跟踪特定的进程ID(pid)。这允许我们指定某个已经正在运行的进程作为跟踪对象,而不需要重新启动该进程。 #### 四、示例解析 假设我们要分析一个名为 `vim` 的程序的行为: 1. **启动跟踪**: ``` strace -f -o vim.strace vim ``` 这条命令将会跟踪 `vim` 程序,并将其输出保存到 `vim.strace` 文件中。 2. **查看输出文件**: 使用 `less` 命令查看 `vim.strace` 文件: ``` less vim.strace ``` 在输出文件中,我们可以看到一系列系统调用的记录,如: ``` 735:0.000021511 socket(02,01,00)=4(04) 735:0.000014248 setsockopt(04,06,01,0xbfbfe3c8,04)=0(00) 735:0.000013688 setsockopt(04,0xffff,08,0xbfbfe2ec,04)=0(00) 735:0.000203657 connect(04,{AF_INET10.57.18.27:6000},16)ERR#61 Connection refused ``` 这些记录揭示了 `vim` 尝试建立网络连接但被拒绝的过程。 #### 五、与其他工具的比较 `strace` 与 `truss` 和 `ltrace` 类似,都是用于跟踪系统调用的工具。但是它们之间也存在一些区别: 1. **`truss`**:主要用于 System V R4 版本的 Unix 系统中,如 AIX、FreeBSD 等。 2. **`ltrace`**:专门用于跟踪动态链接库中的函数调用,主要在 SunOS 系统中使用,在 GNU/Debian Linux 上也有提供。 3. **`strace`**:则适用于更广泛的 Unix 系统,尤其是在 Linux 系统中广泛使用。它不仅能够跟踪系统调用,还能跟踪信号处理等更复杂的情况。 #### 六、实际应用案例 1. **分析 `clint` 程序**: 假设我们有一个名为 `clint` 的 C++ 程序,在执行时出现了 `Segmentation fault` 错误。我们可以使用 `truss` 来跟踪它的行为: ``` truss -f -o clint.truss clint ``` 通过查看 `clint.truss` 文件,我们可以发现 `clint` 在执行过程中尝试访问了一个不存在的文件 `/root/.clint/plugins`,导致了错误的发生。 2. **调试 `vim` 编辑器**: 当我们需要了解 `vim` 编辑器在启动时做了哪些系统调用时,可以通过以下命令来跟踪: ``` strace -f -D -o vim.trace vim -D ``` 输出文件 `vim.trace` 中包含了 `vim` 启动时所有的系统调用记录,这有助于我们理解其内部工作原理。 #### 七、总结 `strace` 是一个功能强大且易于使用的工具,对于调试和理解Linux程序的行为非常重要。通过掌握其使用方法,可以有效地解决各种复杂的系统级问题。无论是初学者还是经验丰富的开发者,都应该熟悉 `strace` 的使用。






















- 向太阳的进击2014-06-27不错可用,谢谢分享

- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 计算机组成原理本科生试题库整理附答案.doc
- 抓好项目管理增强索赔意识.docx
- 计算机级C语言笔试部分。分为数据结构软件工程数据库面向程序设计。很详细.doc
- 自动化技术在工业电气工程中的特点、具体应用及发展趋势研究.docx
- qrasww单片机控制交通灯大学设计.doc
- 工程项目管理系统安全技术模块功能设计.docx
- 幼师计算机实践教学模式探索.docx
- 基于高中物理信息化教学的探索.docx
- DNS在PS核心网中的作用.ppt
- 全国计算机等考试二C笔试试题.doc
- 基于隐式马尔可夫模型和正向最大化匹配的中文分词系统
- 中国旅游网络营销策略探讨-E时代.docx
- 互联网+时代广播新闻策划探究.docx
- Windows窗口高级编程第二讲.ppt
- Python3 Flask实战:笔记网站
- 论文《基于Internet分布式无线传感器网络设计与实现》.doc


