ltrace 是什么
ltrace 追踪进程调用的库函数,例如 malloc、strcmp、getaddrinfo,输出每次调用的参数与返回值。它与 strace 互补:strace 看系统调用,ltrace 看用户态的库调用,适合定位「代码走到了哪一步、参数是什么」。不少发行版默认不安装它,需要先装包。
基本信息
| 用途 | 追踪用户态库函数调用 |
|---|---|
| 语法 | ltrace [选项] [命令 | -p PID] |
| 常用选项 | -f 跟随子进程、-e 过滤函数、-o 落盘、-T 显示耗时 |
| 权限 | 附着到已有进程需要相应权限 |
典型使用场景
- 定位程序在库函数层面卡住或返回异常的位置
- 确认代码是否真的调用了预期函数,例如解析相关调用
- 分析调用耗时,找出初始化阶段的瓶颈
- 排查参数传递错误导致的行为异常
- 与 strace 配合,区分库层问题与内核层问题
- 观察动态库加载与符号解析过程
常用示例
常用示例
ltrace -f -o /tmp/lt.log ./app # 跟随子进程并把输出写入文件
ltrace -e 'malloc+free' ./app # 只看内存分配与释放
ltrace -e 'getaddrinfo' ./app # 只看解析相关的库调用
ltrace -T ./app # 显示每次调用的耗时
ltrace -p 1234 -T 2>/dev/null # 附着到运行中的进程观察
strace -f -p 1234 # 对照:系统调用视角
sudo apt install ltrace # Debian 系安装(RHEL 系用 dnf)常用选项
| 选项 | 作用 | 说明 |
|---|---|---|
| -f | 跟随子进程 | 多进程程序必须加 |
| -e 表达式 | 过滤目标函数 | 可用加号连接多个 |
| -o 文件 | 输出写入文件 | 避免干扰被测程序终端 |
| -T | 显示调用耗时 | 定位慢调用最快 |
| -p PID | 附着到进程 | 需要相应权限 |
静态编译的 Go、Rust 二进制不产生动态库调用,ltrace 看不到预期内容;这类程序应改用 strace 或应用自身的性能分析手段。
对高度优化、函数被内联的代码,ltrace 可能看不到你以为的函数:被内联后不会产生调用记录,不要据此判断代码没有执行。
追踪会明显拖慢被测进程且需要较高权限:生产环境使用前先评估影响,优先在测试环境复现问题。
只想确认「调用了哪个函数」时,过滤表达式比全量输出高效得多:先猜几类可能的函数,再逐步放宽条件,日志量会小一个量级。