strace、ltrace、ftrace 和 dtrace

devtools/2025/1/16 21:17:09/

1. strace

功能

strace 用于追踪系统调用和信号,是诊断和调试程序的强大工具。

strace [options] -p <pid>  常用选项
-p <pid>: 附加到指定的进程。
-c: 显示系统调用的统计信息,包括总调用数、总时间等。
-e trace=<event>: 只跟踪特定类型的系统调用,例如:
-e trace=file:跟踪文件相关的系统调用。
-s <string_len>: 设置输出字符串的最大长度。
-o <output_file>: 将输出写入指定文件。示例:
strace -p 1234  
strace -c -p 1234  
strace -e trace=file -p 1234  
使用场景
  • 诊断应用程序的错误。
  • 分析系统调用的性能。
  • 检查应用程序的安全行为。

2. ltrace

功能

ltrace 用于跟踪用户程序调用的动态库函数。

用法
ltrace [options] -p <pid>  常用选项
-p <pid>: 附加到指定进程。
-e <event>: 指定要跟踪的库函数,例如:-e malloc;
-o <output_file>: 将输出写入指定文件。示例
bash
ltrace -p 1234  
ltrace -e malloc -p 1234  
使用场景
  • 分析程序与共享库的交互。
  • 检查程序使用的函数和参数。

3. ftrace

功能

ftrace 是 Linux 内核提供的跟踪机制,可用于追踪内核活动。

用法
  • ftrace 的配置和使用一般涉及到 /sys/kernel/debug/tracing 目录。
  • 启用 ftrace 需要 root 权限。
常用操作
  1. 启用跟踪:

    • 通过写入文件来启用特定的跟踪功能
      echo function > /sys/kernel/debug/tracing/current_tracer 

              2.查看情况

cat /sys/kernel/debug/tracing/trace 

               3. 禁用跟踪

echo 0 > /sys/kernel/debug/tracing/tracing_on  

 使用场景

  • 深入分析内核函数调用。
  • 调试内核模块。
  • 性能调优。

4. dtrace

功能

dtrace 是一个动态追踪工具,能够从用户空间和内核空间进行监控,主要用于 Solaris 系统,但某些 Linux 发行版提供支持。

用法
dtrace [options] -p <pid>  常用选项
-p <pid>: 附加到指定的进程。
-n <probe>: 指定要监控的探针。
-s <script>: 运行指定的脚本。示例dtrace -p 1234  
dtrace -n syscall::entry  
使用场景
  • 性能分析和调优。
  • 复杂问题的调试,特别是在动态库和内核之间。

总结

这四个命令各有特点,适用于不同的调试和分析任务:

  • strace: 主要用于系统调用和信号的监控。
  • ltrace: 侧重于动态库函数调用的跟踪。
  • ftrace: 强调内核级别的函数调用分析。
  • dtrace: 动态追踪,适用于复杂的调试需求。


http://www.ppmy.cn/devtools/151058.html

相关文章

Postman接口自动化测试:批量参数化(参数文件)

Postman接口请求中的参数引用格式&#xff1a;{{参数名}}参数文件只适用于集合中。 创建参数文件 以记事本举例&#xff0c;也可以使用其他编辑器&#xff1b;第一行参数名&#xff0c;用半角逗号&#xff08;英文逗号&#xff09;隔开&#xff0c;第二行为参数值&#xff0c…

机器学习-归一化

文章目录 一. 归一化二. 归一化的常见方法1. 最小-最大归一化 (Min-Max Normalization)2. Z-Score 归一化&#xff08;标准化&#xff09;3. MaxAbs 归一化 三. 归一化的选择四. 为什么要进行归一化1. 消除量纲差异2. 提高模型训练速度3. 增强模型的稳定性4. 保证正则化项的有效…

AIDD - 人工智能药物设计 -深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送

Nat. Biotechnol. | 深度学习赋能脂质纳米颗粒设计&#xff0c;实现高效肺部基因递送 今天为大家介绍的是来自美国麻省理工和爱荷华大学卡弗医学院团队的一篇论文。可离子化脂质&#xff08;ionizable lipids&#xff09;是脂质纳米颗粒&#xff08;lipid nanoparticles&#…

科技赋能:多功能气膜综合馆引领场馆新革命—轻空间

在现代体育场馆建设中&#xff0c;如何为运动员提供更佳的比赛环境&#xff0c;为观众营造更舒适的观赛体验&#xff0c;已成为场馆设计的关键课题。而多功能气膜综合馆以其独特的声学优化技术和卓越的场馆功能&#xff0c;成功突破了传统气膜场馆的局限&#xff0c;为运动体验…

Docker中编码和时区设置不生效问题排查

一、编码不生效排查 在 docker-compose.yml 中设置了环境变量&#xff0c;但进入 Docker 容器后 LANG 仍然显示为 zh_CN.UTF-8&#xff0c;按照以下步骤进行排查和修复&#xff1a; 1. 确保设置正确 确保你的 docker-compose.yml 文件中环境变量设置没有拼写错误&#xff0c;示…

互联网架构困境:TCP/IP 拥塞难题与地址对称性

副标题&#xff1a;作为内容分发的互联网协议演进 注意&#xff0c;“作为内容分发的互联网” 修饰&#xff0c;这意味着本文缺失了 “作为对等通信的互联网” 的内容&#xff0c;这是有意为之&#xff0c;因为互联网一开始就源自对等通信&#xff0c;稍微照顾内容分发(FTP)&a…

unity学习18:unity里的 Debug.Log相关

目录 1 unity里的 Debug.log相关 2 用Debug.DrawLine 和 Debug.DrawRay画线 2.1 画线 1 unity里的 Debug.log相关 除了常用的 Debug.Log&#xff0c;还有另外2个 Debug.Log("Debug.Log"); Debug.LogWarning("Debug.LogWarning"); Debug.LogErro…

vue使用自定义指令实现水印

水印指令 封装自定义水印指令在main.js中全局注册指令项目中使用指令 封装自定义水印指令 在项目中创建一个watermark.js文件&#xff0c;封自定义自定的方法&#xff0c;这个文件不需要修改可以直接复制粘贴使用&#xff0c;当然可以根据自己的水印样式需求&#xff0c;去修改…