首页/系统/Linux 运维命令速查/ltrace 跟踪库函数调用
进程与作业69 条

ltrace 跟踪库函数调用

看进程调用了哪些库函数(malloc/strcmp/getaddrinfo...):定位「代码走到了哪一步、参数是什么」,与 strace 互补。

Linux 运维命令速查系统更新于 2026-10-13

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 可能看不到你以为的函数:被内联后不会产生调用记录,不要据此判断代码没有执行。
追踪会明显拖慢被测进程且需要较高权限:生产环境使用前先评估影响,优先在测试环境复现问题。
只想确认「调用了哪个函数」时,过滤表达式比全量输出高效得多:先猜几类可能的函数,再逐步放宽条件,日志量会小一个量级。

易错点

  • 对静态编译的二进制用 ltrace:完全没有输出,误判程序没有执行
  • 依赖被内联函数的调用记录:优化之后不再产生调用,结论因此失真
  • 在生产环境长时间 attach:进程被拖慢,波及真实业务
  • 忘记先安装 ltrace:命令不存在,误以为是权限或内核限制

数据来源与参考

  • man 1 ltrace(ltrace 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌