LINUX ltrace命令-用来跟踪进程调用库函数的情况学习
生活随笔
收集整理的這篇文章主要介紹了
LINUX ltrace命令-用来跟踪进程调用库函数的情况学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接:
http://www.bluestep.cc/linux-ltrace%E5%91%BD%E4%BB%A4-%E7%94%A8%E6%9D%A5%E8%B7%9F%E8%B8%AA%E8%BF%9B%E7%A8%8B%E8%B0%83%E7%94%A8%E5%BA%93%E5%87%BD%E6%95%B0%E7%9A%84%E6%83%85%E5%86%B5/
ltrace命令是用來跟蹤進程調用庫函數的情況。
語法:
ltrace [option ...] [command [arg ...]]選項
-a 對齊具體某個列的返回值。 -c 計算時間和調用,并在程序退出時打印摘要。 -C 解碼低級別名稱(內核級)為用戶級名稱。 -d 打印調試信息。 -e 改變跟蹤的事件。 -f 跟蹤子進程。 -h 打印幫助信息。 -i 打印指令指針,當庫調用時。 -l 只打印某個庫中的調用。 -L 不打印庫調用。 -n, --indent=NR 對每個調用級別嵌套以NR個空格進行縮進輸出。 -o, --output=file 把輸出定向到文件。 -P PID 附著在值為PID的進程號上進行ltrace。 -r 打印相對時間戳。 -s STRLEN 設置打印的字符串最大長度。 -S 顯示系統調用。 -t, -tt, -ttt 打印絕對時間戳。 -T 輸出每個調用過程的時間開銷。 -u USERNAME 使用某個用戶id或組ID來運行命令。 -V, --version 打印版本信息,然后退出。 -x NAME treat the global NAME like a library subroutine.實例
? ?最基本應用,不帶任何參數:
[guest@localhost tmp]$ ltrace ./a.out __libc_start_main(0x80484aa, 1, 0xbfc07744, 0x8048550, 0x8048540 <unfinished ...> printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23 printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 --- SIGFPE (Floating point exception) --- +++ killed by SIGFPE +++? ?輸出調用時間開銷:
[guest@localhost tmp]$ ltrace -T ./a.out __libc_start_main(0x80484aa, 1, 0xbf81d394, 0x8048550, 0x8048540 <unfinished ...> printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 <0.000972> printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23 <0.000155> printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 <0.000153> --- SIGFPE (Floating point exception) --- +++ killed by SIGFPE +++? ?顯示系統調用:
[guest@localhost tmp]$ ltrace -S ./a.out SYS_brk(NULL) = 0x9e20000 SYS_access(0xa4710f, 4, 0xa4afc0, 0, 0xa4b644) = 0 SYS_open("/etc/ld.so.preload", 0, 02) = 3 SYS_fstat64(3, 0xbfbd7a94, 0xa4afc0, -1, 3) = 0 SYS_mmap2(0, 17, 3, 2, 3) = 0xb7f2a000 SYS_close(3) = 0 SYS_open("/lib/libcwait.so", 0, 00) = 3 SYS_read(3, "\177ELF\001\001\001", 512) = 512 SYS_fstat64(3, 0xbfbd76fc, 0xa4afc0, 4, 0xa4b658) = 0 SYS_mmap2(0, 4096, 3, 34, -1) = 0xb7f29000 SYS_mmap2(0, 5544, 5, 2050, 3) = 0x423000 SYS_mmap2(0x424000, 4096, 3, 2066, 3) = 0x424000 .............省去若干行?
總結
以上是生活随笔為你收集整理的LINUX ltrace命令-用来跟踪进程调用库函数的情况学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: strace用法学习
- 下一篇: pstack命令学习