2025-04-01
ltrace
是一个用于跟踪进程调用动态库函数的工具,主要用于调试和分析程序运行时与共享库(.so 文件)的交互情况。
动态库调用跟踪:显示程序调用的动态库函数(如libc中的 printf、malloc等),包括参数和返回值。
系统调用跟踪(部分支持):通过-S
选项可同时跟踪系统调用(类似strace的功能)。
性能分析:统计函数调用次数和时间开销,帮助定位性能瓶颈。
ltrace [选项] <可执行程序> [程序参数]
-p <PID>:附加到正在运行的进程。
-c:统计函数调用次数和时间,汇总输出。
-S:同时跟踪系统调用(需内核支持)。
-e <表达式>:只跟踪特定函数(如 -e malloc -e free)。
-o <文件>:将输出保存到文件。
ltrace ./my_program
...
printf("Hello, %s\n", "World") = 13
malloc(100) = 0x12345678
...
ltrace -c ./my_program
% time seconds usecs/call calls function
------ ----------- ----------- --------- --------------------
...
50.0 0.001000 100 10 malloc
30.0 0.000600 60 10 printf
..
ltrace -e strcmp hostname
hostname->strcmp("hostname", "ypdomainname") = -17
hostname->strcmp("hostname", "domainname") = 4
hostname->strcmp("hostname", "nisdomainname") = -6
hostname->strcmp("hostname", "dnsdomainname") = 4
ltrace:主要跟踪动态库函数调用(用户空间)。
strace:跟踪系统调用(内核空间),如文件操作、进程控制等。
调试动态库链接问题。
分析程序性能瓶颈(如频繁调用的函数)。
逆向工程时观察程序行为。
注意:ltrace 依赖于动态库的符号表,对静态链接或高度优化的代码可能受限。