
Linux 下的调试工具 ltrace 与 strace
ltrace 能够跟踪进程的库函数调用 ,它会显现出哪个库函数被调用
strace 则是跟踪程序的每个系统调用 .
下面是一个 ltrace 与 strace 的对比
1) 系统调用的输出对比
我们用输出 hello world 的程序做如下测试 :
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
gcc hello.c -o hello
用 ltrace 跟踪 hello 程序 ,如下 :
ltrace ./hello
__libc_start_main(0x80483b4, 1, 0xbfc780a4, 0x80483e0, 0x80483d0
<unfinished ...>
puts("Hello World!"Hello World!
) = 13
+++ exited (status 0) +++
注:我们看到程序调用了 puts(); 库函数做了输出 .
用 strace 跟踪 hello 程序 ,如下 :
strace ./hello
execve("./hello", ["./hello"], [/* 45 vars */]) = 0
brk(0) = 0x98e8000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|
MAP_ANONYMOUS, -1, 0) = 0xb7837000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=83009, ...}) = 0
mmap2(NULL, 83009, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7822000
close(3) = 0